簡體   English   中英

For循環不等待用戶輸入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM