2017-08-21 6 views
-1

Entschuldigung, wenn ich diese Frage nicht richtig einreiche. Es ist mein erstes Mal hier.While-Schleife bewirkt, dass die App einfriert

Also bin ich neu in der Programmierung und App-Entwicklung. Ich habe in den letzten Wochen Java gelernt und versuche eine Android-App zu erstellen. Es ist nur ein einfaches Zahlen-Ratespiel.

Also ich habe den Code jetzt wo, wenn es nur ein paar "if" -Aussagen, es wird funktionieren. Natürlich bekommst du damit nur eine Vermutung, da es keine Schleife ist.

Wenn ich es in eine While-Schleife setze, wird die App einfrieren, wenn die While-Schleife versucht, eine Schleife zu machen. Hier

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

     }); 
} 

Ich habe versucht, es einen angemessenen Betrag schon googeln, aber ich finde nicht viel Hilfe bei dieser Ausgabe. Hier ist ein Link zum Code: https://pastebin.com/B11pgvzD.

Wer hat eine Vorstellung davon, was es sein könnte?

Antwort

2

Sie brauchen nicht einmal eine while Schleife hier. Wenn ich richtig verstehe, ist Ihre aktuelle while Schleife in einem Listener auf eine Art Übermittlungsschaltfläche für die Benutzereingabe. Nun, Sie müssen nur einmal mit jedem Klick auf die Schaltfläche überprüfen, denn bis der Benutzer seine Eingabe eingereicht hat, ist es aus Sicht der Geschäftslogik noch nicht passiert.

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