私が抱えている問題は、私のスコアカウンター変数 'score'が自分のプログラムで1以上に上がらないということです。ユーザが表示された乱数(LoadG1)に等しい値を入力すると、ポイントが付与されます。これは、より長いタイマーに示されるように、最後に出力される。短いタイマーでは、ポイントが追加されます。 int変数は最初に宣言されています。すべてが以下に示されています。私はそれが最終的であることを知っています、そして、これは私の問題の原因である可能性が最も高いですが、IDEはそれが最終的なものでなければならないと私は変数 'score'を1つのメソッド(私のケースではCountDown Timer)これは私に問題を引き起こしている。ユーザーが毎回正しい入力を持っていれば、4秒タイマーが繰り返されるたびにポイントを追加するつもりですが、現時点では1を超えることはできません。私は最終的な得点を下に示すように最後に出力したいと思います。スコア変数は更新されず、最終値でなければなりませんか?
コード:
final int[] score = {0};
final Random generateG1 = new Random();
final int loadG1 = generateG1.nextInt(1000000)+10000;
final TextView number = (TextView) findViewById(R.id.number);
number.setText(" "+loadG1);
final CountDownTimer loop = new CountDownTimer(4000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
number.setVisibility(View.GONE);
final TextView prompt = (TextView) findViewById(R.id.prompt);
prompt.setVisibility(View.VISIBLE);
prompt.setText(" Enter the number");
final EditText input = (EditText) findViewById(R.id.enterAnswer);
input.setVisibility(View.VISIBLE);
input.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
Editable answer = input.getText();
int finalAnswer = Integer.parseInt(String.valueOf(answer));
int finalLoadG1 = Integer.parseInt(String.valueOf(loadG1));
input.setVisibility(View.GONE);
prompt.setVisibility(View.GONE);
if (finalAnswer == finalLoadG1) {
score[0]++;
}
number.setVisibility(View.VISIBLE);
final int loadG1 = generateG1.nextInt(1000000) + 10000;
number.setText(" " + loadG1);
input.getText().clear();
start();
return true;
default:
}
}
return false;
}
});
}
}.start();
new CountDownTimer(24000, 1000) {
@Override
public void onTick (long millisUntilFinished) {
}
@Override
public void onFinish() {
TextView result = (TextView) findViewById(R.id.outcome);
result.setText("Score: "+ score[0]);
TextView prompt = (TextView) findViewById(R.id.prompt);
prompt.setVisibility(View.GONE);
final EditText input = (EditText) findViewById(R.id.enterAnswer);
input.setVisibility(View.GONE);
loop.cancel();
}
}.start();
誰かが私の問題に対する修正を私に提供することができる場合、私は、事前のおかげで、それを大幅にいただければと思います。
最小限の実行可能な例を試してみてください。あなたの問題がどこにあるのか分かりません。 * final *配列を持つことは*素晴らしい*です - つまり、配列自体は同じままになりますが、配列内の1つのエントリは更新可能です。 – GhostCat
'score'をクラスのメンバー変数にすることはできませんか? –
[このカウントダウンタイマーを特定の方法で繰り返すにはどうすればよいですか?](http://stackoverflow.com/questions/40057754/how-can-i-repeat-this-countdown-timer-in-特定の方法) – Selvin