if/elseif 语句的输出不正确



在我的提交按钮中,if/else if 语句对于我的正确/不正确输出无法正常工作。

例如,问题:维多利亚在哪里? 答:不列颠哥伦比亚省 - 不正确。 但是,如果我回答:艾伯塔省或不列颠哥伦比亚省,这是正确的。 我不明白这个错误。 如果我写的省份不完整,则会发生错误,而不是错误的省份。

我该如何解决这个问题?

这是我的代码:

提交按钮代码

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    outputDegree.setText(null);
    if (inputAnswer.getText().equals(provinces.get(0))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
    }
   else if (inputAnswer.getText().equals(provinces.get(1))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(2))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(3))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(4))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(5))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(6))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(7))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(8))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(9))) {         
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(10))) {         
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(11))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else if (inputAnswer.getText().equals(provinces.get(12))) {
     outputDegree.setText("Correct");
     nextQuestion.setEnabled(true);
   }
   else {
       outputDegree.setText("Incorrect, try again!!");
       nextQuestion.setEnabled(false);
    }

显示答案和可能的答案(1 个正确,3 个错误(

private void nextQuestionActionPerformed(java.awt.event.ActionEvent evt) {                                             
   boolean trueOrFalse;
   outputTextQuestion.setText(null);
   outputTextQuestion.setText(setQuestions().toString());
   outputAnswers.setText(null);        
   inputAnswer.setText(null);       
   outputDegree.setText(null);
   clicked++;
   int buttonLimit = 4;
   if (clicked  <= buttonLimit) {

       int correctAnswer = -1;
        for (int x = 0; x < cities.size(); x++)
        {
            if (trueOrFalse = outputTextQuestion.getText().contains(cities.get(x)))
            {
                correctAnswer = x;
                break;
            }
        }
        randomAnswers = new ArrayList <Integer>();
        Collections.addAll(randomAnswers, correctAnswer);
        for (int x=0; x < 3; x++)
        {
           int r = correctAnswer;
           while (randomAnswers.contains(r))
            {
                r = ((int)(Math.random()*100))%cities.size();
            }
            Collections.addAll(randomAnswers, r);
        }
        Collections.shuffle(randomAnswers);
        outputAnswers.setText(null);
        for (int r=0; r<randomAnswers.size(); r++) {
             int hint = randomAnswers.get(r);
             outputAnswers.append(provinces.get(hint) + "n");
        }
}
   else{
        nextQuestion.setEnabled(false);
        submitButton.setEnabled(false);
        outputTextQuestion.setText("Start new round");
        outputDegree.setText(null);

   }

我也在使用ArrayLists,如城市,省份,randomAnswers。 我只是没有展示我的整个程序,因为它很大。 如果需要,我可以。

我在 Netbeans 中执行此操作,这个程序是一个 GUI

提前感谢!!

不知道代码的哪一部分应该做你似乎期望的事情,你期望部分输入是匹配的,以下是原因:

  • 在第一种方法中,您使用的是 equals() .部分匹配永远不会等于全文。

  • 在第二种方法中,您使用的是 contain() ,但颠倒了:

    getText().contains(cities.get(x))部分文本bert不包含全文Alberta。这是另一种方式,即 Alberta包含文本bert

您应该真正考虑使用循环来迭代列表,而不是手动执行。想象一下,如果你在各省有50个元素。

String answer = inputAnswer.getText();
boolean isCorrect = false;
for (String city : provinces) {
    if (answer.equalsIgnoreCase(city)) {
        outputDegree.setText("Correct");
        nextQuestion.setEnabled(true);
        isCorrect = true;
        break; // stops the loop if answer is correct
    }
}
if (!isCorrect) { //if there were no correct answers
    outputDegree.setText("Incorrect, try again!!");
     nextQuestion.setEnabled(false);
}

submitButtonActionPerformed()您正在将inputAnswer.getText()与所有有效provinces进行比较 - 如果它匹配其中任何一个,您正在设置outputDegree.setText("Correct") - 因此,在您的逻辑中,如果用户输入与任何省份不匹配,您将解释不正确的答案。您应该考虑此逻辑,并将问题与此 API 中的用户答案相关联

最新更新