2017-08-21 109 views
-1

对不起,如果我没有正确提交此问题。这是我第一次来这里。虽然循环导致应用程序冻结

所以我是编程和应用程序开发新手。过去几周我一直在学Java,并试图制作一个Android应用程序。这只是一个简单的猜数字游戏。

因此,我现在的代码在哪里,如果它只是几个“如果”的话,它会工作。当然,因为它不是一个循环,所以你只能得到一个猜测。

当我把它放在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循环位于用户输入的某种提交按钮的侦听器内。那么,每次点击按钮只需要检查一次,因为直到用户提交了他的输入,从业务逻辑的角度来看,它确实还没有发生。

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