在我的提交按钮中,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
提前致谢!!
答案 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);
}