[英]For Loop not waiting for user input
您好,我目前正在進行一個 android 項目。 用戶必須回答一個數學問題,然后應該獎勵/拿走答案,然后代碼應該顯示第二個不同的問題,直到完成 10 個問題。 問題是代碼跳過循環並立即完成游戲。 我曾嘗試使用 while 循環,但發生了同樣的問題。 我考慮了一個 if 但無法弄清楚如何重新運行 if。 下面是項目的全部代碼,但主要問題是 for 循環。
package com.example.mixmathsv3;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Random;
public class SimpleModeActivity extends AppCompatActivity {
Button checkButt, nextQuestionButt;
TextView resultText, simpleQuestionText, scoreText, questionNumberText;
EditText userAnswer;
public volatile int completedTimes = 0;
public int scoreValue = 0;
public int intUserAnswer = 0;
public String questionAnswer = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_mode);
resultText = (TextView) findViewById(R.id.result);
checkButt = (Button) findViewById(R.id.checkButt);
simpleQuestionText = (TextView) findViewById(R.id.simpleQuestionText);
scoreText = (TextView) findViewById(R.id.scoreText);
userAnswer = (EditText) findViewById(R.id.userAnswer);
//nextQuestionButt = (Button) findViewById(R.id.nextQuestion/Butt);
//questionNumberText = (TextView) findViewById(R.id.questionNumberText);
final String[] questionArray = {"5+2", "10+3", "7+1", "9+0", "1+6"};
final String[] answerArray = {"7", "13", "8", "9", "7"};
final Random r = new Random();
int arrayRandom = r.nextInt(questionArray.length);
simpleQuestionText.setText(questionArray[arrayRandom]);
questionAnswer = (answerArray[arrayRandom]);
for (int i = 1; i < 11; i++) {
//System.out.println(i);
//Toast.makeText(getApplicationContext(), ("loop successful"), Toast.LENGTH_SHORT).show();
checkButt.setEnabled(true);
checkButt.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
public void onClick(View v) {
checkButt.setEnabled(false);
intUserAnswer = Integer.parseInt(userAnswer.getText().toString());
int intQuestionAnswer = Integer.parseInt(questionAnswer);
if (intUserAnswer == intQuestionAnswer) {
resultText.setText("Correct");
scoreValue = scoreValue + 10;
//completedTimes = + 1;
//questionNumberText.setText(completedTimes);
Toast.makeText(getApplicationContext(), ("Your Score is " + scoreValue), Toast.LENGTH_SHORT).show();
}
if (intUserAnswer != intQuestionAnswer) {
resultText.setText("Incorrect");
scoreValue = scoreValue - 5;
//completedTimes = + 1;
//questionNumberText.setText(completedTimes)
Toast.makeText(getApplicationContext(), ("Your Score is " + scoreValue), Toast.LENGTH_SHORT).show();
}
}
});
}
Toast.makeText(getApplicationContext(), ("Game Over"), Toast.LENGTH_SHORT).show();
setOnClickListener
並沒有按照你的想法做:
setOnClickListener
用於注冊一個只有在用戶單擊按鈕時才會調用的方法。
在您的示例中,for 循環注冊了 10 次新的onClickListener
,這不是我們想要的。
在您的情況下,您不能使用立即執行的 for 循環。 當用戶單擊按鈕時更改問題和文本。
final String[] questionArray = {"5+2", "10+3", "7+1", "9+0", "1+6"};
final String[] answerArray = {"7", "13", "8", "9", "7"};
final Random r = new Random();
int answered = 0;
// Initial question
int arrayRandom = r.nextInt(questionArray.length);
simpleQuestionText.setText(questionArray[arrayRandom]);
questionAnswer = (answerArray[arrayRandom]);
checkButt.setEnabled(true);
checkButt.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
public void onClick(View v) {
checkButt.setEnabled(false);
intUserAnswer = Integer.parseInt(userAnswer.getText().toString());
int intQuestionAnswer = Integer.parseInt(questionAnswer);
if (intUserAnswer == intQuestionAnswer) {
resultText.setText("Correct");
scoreValue = scoreValue + 10;
//completedTimes = + 1;
//questionNumberText.setText(completedTimes);
Toast.makeText(getApplicationContext(), ("Your Score is " + scoreValue), Toast.LENGTH_SHORT).show();
}
if (intUserAnswer != intQuestionAnswer) {
resultText.setText("Incorrect");
scoreValue = scoreValue - 5;
//completedTimes = + 1;
//questionNumberText.setText(completedTimes)
Toast.makeText(getApplicationContext(), ("Your Score is " + scoreValue), Toast.LENGTH_SHORT).show();
}
answered++;// We update the count of answered question
if(answered == 10) {
// Finish
Toast.makeText(getApplicationContext(), ("Game Over"), Toast.LENGTH_SHORT).show();
} else {
// Change question
int arrayRandom = r.nextInt(questionArray.length);
simpleQuestionText.setText(questionArray[arrayRandom]);
questionAnswer = (answerArray[arrayRandom]);
}
}
});
我建議您詳細了解 Android 的工作原理和callback
方法。
您不需要將所有內容都放在循環中。 將所有邏輯移到循環之外,它應該可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.