对于我的科学展览项目,我想要对法语教学计划进行图形更新,这个计划在DosBOX中已经很久了。这一切都很好,但我遇到了问题。我在控制台应用程序中编写程序的基本逻辑只是为了将它们组合在一起。我创建了一个问题类,该类位于数组列表/集合中,称为" test1"。
我有一个迭代遍历列表的循环,每次迭代时,它运行另一个名为evaluate的方法:
public static boolean evaluate(Question question, Scanner scanner)
{
System.out.println(question.getPhrase()); // prints the question
String answer = scanner.nextLine(); // gets the answer
if (answer.compareTo(question.getCorrectAnswer()) == 0)
return true; // compares the answer to the correct answer w/i the current instance of "Question"
else
return false; // if it's not right, returns "false" meaning the question wasn't correct
}
循环看起来像这样:
for (Question question : test1)
{
if (evaluate(question, scan))
{
incorrect = 0;
continue;
}
else
{
incorrect++;
System.out.println(incorrect);
}
if (incorrect == 3)
System.out.println("you have failed");
break;
}
我想这样做,如果你错误地回答了一个问题,它会再次吐出这个短语并增加"错误"按1,如果你点击3,则终止列表(我想我已经正确实现了这个,如果我可以让它重复这个问题)。现在它移动到列表中的下一个项目,因此即使我不想要那个也是下一个问题。
对不起,如果我的代码太糟糕了,我还是比较新的编程。
答案 0 :(得分:1)
在for循环内部创建一个while循环,表示如果问题没有得到正确回答,那么在每个问题中重复这个问题,直到它正确为止。将所有内容保存在您应该创建的while循环中的for循环中:
for (Question question : test1)
{
while(!evaluate(question, scan)) {
if (evaluate(question, scan))
{
incorrect = 0;
continue;
}
else
{
incorrect++;
System.out.println(incorrect);
}
if (incorrect == 3)
System.out.println("you have failed");
break;
}
}
答案 1 :(得分:0)
您可以执行以下操作,而不是按照现在的方式执行foreach
循环:
for (int i = 0; i < test1.size(); i++) {
Question question = test1.get(i);
if (evaluate(question, scan)) {
...
} else {
incorrect++;
test1.add(question);
}
if (incorrect == 3) { ... }
}
这假设您使用的是使用size()
和add()
作为方法的数据结构;你可以根据自己的使用情况进行调整。
这将在稍后重复提问,但不会立即重复。如果你想在之后立即重复,只需在i--
案例中递减else
:
for (int i = 0; i < test1.size(); i++) {
Question question = test1.get(i);
if (evaluate(question, scan)) {
...
} else {
incorrect++;
i--;
}
if (incorrect == 3) { ... }
}
您还可以为else
案例嵌套循环:
for (Question question : test1) {
boolean passed = True;
incorrect = 0;
while (!evaluate(question, scan)) {
incorrect++;
if (incorrect == 3) { passed = False; break; }
}
if (!passed) { System.out.println("you have failed"); break; }
}