2017-08-21 16 views
-1

申し訳ありませんが、私はこの質問を正しく送信していません。ここは初めてのことです。whileループでアプリがフリーズする

私はコーディングとアプリケーション開発には新しいです。私は過去数週間Javaを学んでいて、アンドロイドアプリを作ろうとしています。それは単純な数字の推測ゲームです。

だから、ここでコードがありますが、if文がほんの少しあれば動作します。もちろん、これはループではないので、1つの推測しか得られません。

whileループに入れると、whileループがループしようとするとアプリケーションがフリーズします。ここで

コードです:

package com.example.jeremy.numberguessinggame; 

import org.w3c.dom.Text; 

import java.util.Random; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final TextView title = (TextView) findViewById(R.id.textView1); 
    final EditText userGuess = (EditText) findViewById(R.id.editText1); 
    Button btnSubmit = (Button) findViewById(R.id.button1); 
    final TextView guessFeedback = (TextView) findViewById(R.id.textView2); 
    final TextView textNumberOfGuesses = (TextView) findViewById(R.id.textView3); 
    final TextView textGuessNumber = (TextView) findViewById(R.id.textView4); 
    final TextView textCorrectNumber = (TextView) findViewById(R.id.tempText); 
    Random rand = new Random(); 
    final int correctNumber = rand.nextInt(5)+1; 

    //This line is to convert the int correctNumber to a String 
    textCorrectNumber.setText(String.valueOf(correctNumber)); 

     btnSubmit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       int numberOfTries = 0; 

       //To compare (EditText)userGuess to (integer)rand, we need to get a String from userGuess, and then 
       //convert that string into an integer 
       String convertedString = userGuess.getText().toString(); 
       int convertedNumber = Integer.parseInt(convertedString); 

       while (true) { 
        if (convertedNumber == correctNumber) { 
         guessFeedback.setText("You guessed the correct number"); 
         numberOfTries++; 
         textGuessNumber.setText(String.valueOf(numberOfTries)); 
         title.setText("YOU WON!!!!!"); 
         break; 
        } else if (convertedNumber > 5 || convertedNumber < 1) { 
         guessFeedback.setText("The number is between 1 and 5."); 
         numberOfTries++; 
         textGuessNumber.setText(String.valueOf(numberOfTries)); 
        } else if (convertedString.equals(null)) { 
         guessFeedback.setText("Nope."); 
        } else if (convertedNumber > correctNumber) { 
         guessFeedback.setText("Your guess is too high."); 
         numberOfTries++; 
         textGuessNumber.setText(String.valueOf(numberOfTries)); 
        } else if (convertedNumber < correctNumber) { 
         guessFeedback.setText("Your guess is too low."); 
         numberOfTries++; 
         textGuessNumber.setText(String.valueOf(numberOfTries)); 
        } 
       } 
      } 

     }); 
} 

私はすでにそれをまともな量をグーグルで試してみたが、私はこの問題に多くの助けを見つけていませんよ。コードへのリンクはhttps://pastebin.com/B11pgvzDです。

誰でも可能性がありますか?

答えて

2

ここでもwhileループは必要ありません。私が正しく理解していれば、あなたの現在のwhileループは、ユーザー入力用の何らかの送信ボタンのリスナーの中にあります。ユーザーが入力を提出するまでは、まだビジネスロジックの観点からは実際には発生していないため、ボタンを1回クリックするごとに1回だけチェックする必要があります。

int numberOfTries = 0; 

btnSubmit.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (convertedNumber == correctNumber) { 
      guessFeedback.setText("You guessed the correct number"); 
      numberOfTries++; 
      textGuessNumber.setText(String.valueOf(numberOfTries)); 
      title.setText("YOU WON!!!!!"); 
     } else if (convertedNumber > 5 || convertedNumber < 1) { 
      guessFeedback.setText("The number is between 1 and 5."); 
      numberOfTries++; 
      textGuessNumber.setText(String.valueOf(numberOfTries)); 
     } else if (convertedString.equals(null)) { 
      guessFeedback.setText("Nope."); 
     } else if (convertedNumber > correctNumber) { 
      guessFeedback.setText("Your guess is too high."); 
      numberOfTries++; 
      textGuessNumber.setText(String.valueOf(numberOfTries)); 
     } else if (convertedNumber < correctNumber) { 
      guessFeedback.setText("Your guess is too low."); 
      numberOfTries++; 
      textGuessNumber.setText(String.valueOf(numberOfTries)); 
     } 
    } 
}); 
関連する問題