【问题标题】:How to finish array question, it always repeating如何完成数组问题,它总是重复
【发布时间】:2019-08-08 17:34:13
【问题描述】:

大家好,我需要帮助。 我有这个代码
我有 50 个问题字符串,如果已经出现 10 个问题,我希望游戏结束。谢谢你的帮助

private Question mQuestion = new Question();

private String mAnswer;
private int mScore = 0;
private int mQuestionLenght = 5 ;

Random r;

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

    r = new Random();


    answer1 = (Button) findViewById(R.id.answer1);
    answer2 = (Button) findViewById(R.id.answer2);
    answer3 = (Button) findViewById(R.id.answer3);
    answer4 = (Button) findViewById(R.id.answer4);

    score = (TextView) findViewById(R.id.score);
    question = (TextView) findViewById(R.id.question);
    score.setText("Score: " + mScore  );

    updateQuestion(r.nextInt(mQuestionLenght));


    answer4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(answer4.getText() == mAnswer){
                mScore++;
                score.setText("Score: " + mScore);
                updateQuestion(r.nextInt(mQuestionLenght));
            } else {
                gameOver();
            }
        }
    });
}
private void updateQuestion(int num){
    question.setText(mQuestion.getQuestion(num));
    answer1.setText(mQuestion.getChoice1(num));
    answer2.setText(mQuestion.getChoice2(num));
    answer3.setText(mQuestion.getChoice3(num));
    answer4.setText(mQuestion.getChoice4(num));
    mAnswer = mQuestion.getCorrectAnswer(num);

}
private void gameOver(){

}

如果用户已经回答了 10 个问题游戏停止并显示分数,我有 50 个问题。在该代码中,如果他们错误的答案游戏可以停止,但如果用户总是正确的游戏加载所有问题,它就无法停止

【问题讨论】:

  • answer4.getText() == mAnswer 这个条件会不会变成假?
  • 创建一个计数器,当它达到十个时,转到gameOver()而不是下一个问题
  • 不清楚你在问什么,请用更多代码和详细描述更新问题
  • 我不能把我的整个代码放在这里。
  • 你能解释一下你的要求吗?现在我们无法了解您实际需要什么

标签: java android arrays string


【解决方案1】:

在你的 Acitivty 中,添加一个计数器属性

private int numberOfQuestionsAsked = 0;

每问一个问题后,给你的计数器加 1

if(answer4.getText().equals(mAnswer)){ //note : use .equals() and not == !
    mScore++;
    numberOfQuestionsAsked++;
    score.setText("Score: " + mScore);
    updateQuestion(r.nextInt(mQuestionLenght));
}

用户回答问题后,检查计数器是否达到10,如果是,则进入游戏结束

if(numberOfQuestionsAsked <= 10) {
    gameOver();
}

在gameOver中,重置计数器以便游戏重新开始

numberOfQuestionsAsked = 0;

你的代码应该是这样的

private Question mQuestion = new Question();

private String mAnswer;
private int mScore = 0;
private int mQuestionLenght = 5 ;
private int numberOfQuestionsAsked = 0;

Random r;

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

    r = new Random();


    answer1 = (Button) findViewById(R.id.answer1);
    answer2 = (Button) findViewById(R.id.answer2);
    answer3 = (Button) findViewById(R.id.answer3);
    answer4 = (Button) findViewById(R.id.answer4);

    score = (TextView) findViewById(R.id.score);
    question = (TextView) findViewById(R.id.question);
    score.setText("Score: " + mScore  );

    updateQuestion(r.nextInt(mQuestionLenght));


    answer4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(answer4.getText().equals(mAnswer)){ //note : use .equals() and not == !
                mScore++;
                score.setText("Score: " + mScore);
                updateQuestion(r.nextInt(mQuestionLenght));
                numberOfQuestionsAsked++;
            } else {
                gameOver();
            }
            if(numberOfQuestionsAsked <= 10) {
                gameOver();
            }
        }
    });
}
private void updateQuestion(int num){
    question.setText(mQuestion.getQuestion(num));
    answer1.setText(mQuestion.getChoice1(num));
    answer2.setText(mQuestion.getChoice2(num));
    answer3.setText(mQuestion.getChoice3(num));
    answer4.setText(mQuestion.getChoice4(num));
    mAnswer = mQuestion.getCorrectAnswer(num);

}
private void gameOver(){
        numberOfQuestionsAsked = 0;
}

【讨论】:

  • 您好,谢谢您,但仍然有 10 个问题。我可以在电子邮件中问你吗?或者我已经卡了 3 天的事情
【解决方案2】:

首先,我会使用:

View.OnClickListener listener = new View.onClickListener() {
    @Override
    public void onClick(View view) {
        if(view instanceOf (TextView) && ((TextView)view).getText().toString().equals(mAnswer)){
            mScore++;
            score.setText("Score: " + mScore);
            if(mScore >= 10) {
                gameCompleted();//ToDo
            } else {
                updateQuestion(r.nextInt(mQuestionLenght));
            }
        } else {
            gameOver();
        }
    }
};

然后,在每个答案中使用此侦听器。 此外,您的随机数可能会失败,因为它可能高于 50 并且可能是重复的答案,并且不建议您进行文本比较,您可以使用为文本分配 id 的对象。

享受编码。

【讨论】:

  • 请检查我的答案是否正确。谢谢!
【解决方案3】:

像这样在你的代码中添加一个计数器:

整数计数器 = 0;

if(counter <= 10 ){
    updateQuestion(r.nextInt(mQuestionLenght));
    counter++;
} else {
    gameOver();
}

添加这个并检查,希望它会工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2013-09-26
    • 2019-07-28
    • 2019-06-28
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多