简体   繁体   中英

While loop causes the app to freeze

Sorry if I'm not submitting this question correctly. It's my first time here.

So I'm new to coding and app development. I've been learning Java the past few weeks and am trying to make an android app. It's just a simple number guessing game.

So I have the code up now where if it just a few "if" statements, it'll work. Of course with this you only get one guess since it's not a loop.

When I put it in a while loop the app will freeze when the while loop tries to loop.

Here is the code:

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));
                    }
                }
            }

        });
}

I've tried googling it a decent amount already but I'm not finding much help with this issue. Here is a link to the code: https://pastebin.com/B11pgvzD .

Anyone have an idea of what it could be?

You don't even need a while loop here. If I understand correctly, your current while loop is inside a listener on some sort of submit button for the user input. Well, you only need to check once with each click of the button, because until the user has submitted his input, it really hasn't happened yet from a business logic point of view.

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));
        }
    }
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM