在我的提交按钮中,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 中的用户答案相关联