2016-10-18 3 views
0

Ich arbeite gerade an einem Udemy-Kurs und baue eine grundlegende App "Höher oder niedriger". Meine App funktioniert im Wesentlichen, aber die Zufallszahl, die sie für uns erraten, ist immer dieselbe, egal wie oft ich die Aktivität zerstöre und neu starte.Variable Zufallszahl der Klasse ... immer gleich? Android.

Mein MainActivity.java:

//mad import statements here 

public class MainActivity extends AppCompatActivity { 

    int correctNumber; 

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

     int correctNumber = generateNum(); 

    } 

    protected int generateNum(){ 
     Random rand = new Random(); 

     int randNum = rand.nextInt(100); 

     return randNum; 
    } 

    protected void numberEval(View view) { 

     EditText enteredNumber = (EditText) findViewById(R.id.numberEntry); 
     String numberString = enteredNumber.getText().toString(); 
     Button pressMe = (Button) findViewById(R.id.button); 



       int numToEval = Integer.parseInt(numberString); 
       String result; 
       TextView showWinLose = (TextView) findViewById(R.id.winLoseText); 

       if (numToEval > correctNumber) { 
        result = "Too high!"; 
       } else if (numToEval < correctNumber) { 
        result = "Too Low!"; 
       }else { 
        result = "You guessed it!"; 
       } 

       showWinLose.setText(result); 

    } 

} 

super super einfach, nicht wahr? Ursprünglich hieß meine numberEval() Methode generateNum(), aber dann erkannte ich, dass es eine neue Zahl erzeugte, um jedes Mal zu erraten, das ich den Knopf drückte. Also habe ich es so eingestellt wie es hier war, wo onCreate()correctNumber nur einmal generiert und correctNumber jetzt eine Klassenvariable ist. Jetzt erzeugt es bei jedem Klick keine neue Nummer, aber es scheint keine neue Nummer zu erzeugen. Es ist bei 0 fest, egal wie oft ich die App starte, schließe, neu starte, etc.

Wie kann ich das beheben? Danke im Voraus.

+0

Weil Sie 'correctNumber' nie auf irgendwas setzen. Beachten Sie, dass hier zwei Variablen namens "correctNumber" sind; einer von ihnen wird verwendet, aber nie gesetzt (so dass er standardmäßig auf 0 gesetzt wird) und der andere wird gesetzt, aber nie benutzt (außer es zu setzen) – immibis

Antwort

0
public class MainActivity extends AppCompatActivity { 

    int correctNumber; 

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

     int correctNumber = generateNum(); 
    } 

// ... 
} 

Die letzte Zeile in onCreate() deklariert ein lokalen Variable mit dem Namen correctNumber. Dadurch wird das Klassenfeld mit demselben Namen ausgeblendet und ist nur innerhalb von onCreate() verfügbar. Entfernen Sie aus dieser Zeile int, um das Problem zu beheben, so dass Sie stattdessen das Klassenfeld verwenden.

Verwandte Themen