if / elseif语句

时间:2017-06-13 22:09:54

标签: java if-statement

在我的提交按钮中,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,例如cities,provinces,randomAnswers。我只是没有展示我的整个节目,因为它很大。如果需要,我可以。

我在Netbeans中这样做,这个程序是一个GUI

提前致谢!!

3 个答案:

答案 0 :(得分:1)

不知道代码的哪一部分应该按照你期望的那样做,你期望部分输入匹配,原因如下:

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

  • 在第二种方法中,您使用的是contain(),但反过来了:
    getText().contains(cities.get(x))
    部分文字bert不包含全文Alberta。这是另一种方式,即Alberta 包含文本bert

答案 1 :(得分:0)

sscanf()中,您要将submitButtonActionPerformed()与所有有效inputAnswer.getText()进行比较 - 如果它与您正在设置provinces中的任何一个匹配 - 那么在您的逻辑中,您会解释错误的答案 ony if 用户输入与任何省份都不匹配。您应该考虑这个逻辑并将问题与此API中的用户答案相关联

答案 2 :(得分:0)

您应该考虑使用循环来迭代列表而不是手动执行。想象一下,如果省内有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);
}