2016-10-18 6 views
0

私はUdemyコースで働いており、基本的な「高低」アプリを構築しています。私のアプリは本質的には機能しますが、私たちが推測する乱数は、何度もアクティビティを破棄して再起動しても同じです。クラス変数の乱数...常に同じですか?アンドロイド。

マイ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); 

    } 

} 

超超基本的な?もともと、私のnumberEval()メソッドはgenerateNum()と呼ばれていましたが、ボタンを押すたびに新しい番号が生成されていることに気付きました。だから私はそれがここにあるように設定しました。ここでonCreate()correctNumberを生成し、correctNumberはクラス変数になります。今は、ボタンのクリックごとに新しい数値を生成することはありませんが、新しい数値を生成するようなことはありません。アプリを起動、終了、再起動などしても、0になってしまいます。

どうすればこの問題を解決できますか?前もって感謝します。

+0

'correctNumber'は決して何にも設定していないからです。 'correctNumber'と呼ばれる2つの変数があります。そのうちの1つは使用されますが設定されることはありません(デフォルトでは0に設定されています)。もう1つは設定されていますが、 – immibis

答えて

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

// ... 
} 

onCreate()の最後の行はcorrectNumberという名前ローカル変数を宣言します。これはクラスフィールドを同じ名前で非表示にし、onCreate()の中でのみ使用できます。問題を解決するには、この行からintを削除して、代わりにクラスフィールドを使用します。

関連する問題