2017-07-12 8 views
0

私はより高いまたはより低いゲームを作っています。私はゲームで乱数が必要ですが、問題は乱数の変化を比較するためにEditTextの数字を使って推測するためにボタンを押すたびに発生します。だから私は静的を使用しましたが、問題は静的ではないので、関数findViewByIdはもう機能しません。ここで非静的クラスで静的乱数を使用したいと思います。 (Java)

は私のコードです:あなたは数にボタンがこの回線でクリックされるたびに変化している

public static void click (View view) { 
    double number = Math.ceil(Math.random()* 20); 

    EditText textIn = (EditText) findViewById(R.id.textIn); 

    int givenN = Integer.parseInt(textIn.getText().toString()); 

    if (number > givenN) { 
     System.out.println("Higher"); 
    } else if (number == givenN){ 
     System.out.println("Good!"); 
    } else if (number < givenN) { 
     System.out.println("Lower"); 
    } 
} 

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

をcalcualtedさ***のEditText textIn =(のEditText)findViewById(R。 id.textIn); *** –

+0

クリックメソッドはコールバックなので、静的ではありません –

+0

はアンドロイドではありませんか?しかし象徴的な数学? –

答えて

3

問題はランダムを推測するためにボタンを押すたびに発生します。 番号の変更。

右。ですから、これを変更して一度しか起こらないようにする必要があります。 onCreate方法にこれを移動すると、私には十分な合理的なようだ:

private double number = -1; 

public void click (View view) // Note: no longer static. 
{ 
    EditText textIn = (EditText) findViewById(R.id.textIn); 
    int givenN = Integer.parseInt(textIn.getText().toString()); 
    if (number > givenN) { 
     System.out.println("Higher"); 
    } else if (number == givenN){ 
     System.out.println("Good!"); 
    } else if (number < givenN) { 
     System.out.println("Lower"); 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    number = Math.ceil(Math.random()* 20); 
} 
+1

親愛なるMichael、あなたの答えをありがとう。私は初心者なので、@Override関数とonCreate関数の使用を知らなかった。これを手伝ってくれてありがとう。私のアプリは魅力的に機能します。 –

+0

@PerbieBよろしくお願いします! 「アクティビティのライフサイクルを説明するこのページ」(https://developer.android.com/guide/components/activities/activity-lifecycle.html)を参照してください。 – Michael

2

double number = Math.ceil(Math.random()* 20); 

をあなたはclick()からこの行を削除してには、この値を生成する必要がありますonCreate()のようなフィールドに保存します。

private double number; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    this.number = Math.ceil(Math.random()* 20); 
} 
0

は、私はあなたが欲しいものをうまく理解していれば、問題はあなたが変数「数」あなたは、クリックメソッドを呼び出すたびに再計算していることです。

変数「数」はクラスプロパティであるべきであり、これは実際のOnCreateメソッドに属する一度だけまたは他の機能を

private static double number;  

public void click (View view) { 
    EditText textIn = (EditText) findViewById(R.id.textIn); 
    int givenN = Integer.parseInt(textIn.getText().toString()); 

    if (number > givenN) { 
     System.out.println("Higher"); 
    } else if (number == givenN){ 
     System.out.println("Good!"); 
    } else if (number < givenN) { 
     System.out.println("Lower"); 
    } 
} 


protected void newNumber() { 
    number = Math.ceil(Math.random()* 20); 
} 

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

    newNumber(); 
} 
+0

私はこれが実際に私の答えと10分前に追加されたものの上に何かを追加するとは思わない。 – Michael

+0

回答を見る前に投稿しました –

関連する問題