我有一个测验应用程序,一旦所有问题都得到解答,我希望删除片段。 questions变量是用户定义对象的队列。
private void loadNextQuestion() {
if (QuizGameActivity.questions.isEmpty()) {
getActivity().getSupportFragmentManager().beginTransaction().remove(thisFragment).commit();
}
mCurrentQuestion = QuizGameActivity.questions.remove();
...
}
但是如果我运行它并回答最后一个问题,我会从尝试删除队列中下一个问题的行中收到java.util.NoSuchElementException。如果队列为空,为什么这条线甚至会执行?上面的if语句可以防止这种情况吗?
答案 0 :(得分:0)
您使用的是程序语言,即Java。在逐步执行代码的情况下执行代码,直到达到最后一个语句。
如果您不希望该行执行,请将其放在else部分或放置一个返回语句。
答案 1 :(得分:0)
正如评论中所提到的,您需要一个else
块。您当前的代码将始终运行mCurrentQuestion = QuizGameActivity.questions.remove();
只需将其更改为以下内容:(对不起,如果它不是您想要做的!我无法完全理解您的意图)
private void loadNextQuestion() {
if (QuizGameActivity.questions.isEmpty()) {
getActivity().getSupportFragmentManager().beginTransaction().remove(thisFragment).commit();
} else {
mCurrentQuestion = QuizGameActivity.questions.remove();
}
...
}
答案 2 :(得分:0)
您正在使用过程语言编写代码,即逐步执行代码的Java。
如果您想摆脱错误,只需在条件中添加其他部分并将行放在那里。
除此之外你可以添加回报;在if条件内。所以在执行之后没有代码。