删除片段后的代码仍在执行

时间:2017-09-22 16:40:54

标签: java android android-fragments linked-list queue

我有一个测验应用程序,一旦所有问题都得到解答,我希望删除片段。 questions变量是用户定义对象的队列。

private void loadNextQuestion() {
        if (QuizGameActivity.questions.isEmpty()) {
            getActivity().getSupportFragmentManager().beginTransaction().remove(thisFragment).commit();
        }
        mCurrentQuestion = QuizGameActivity.questions.remove();
        ...
    }

但是如果我运行它并回答最后一个问题,我会从尝试删除队列中下一个问题的行中收到java.util.NoSuchElementException。如果队列为空,为什么这条线甚至会执行?上面的if语句可以防止这种情况吗?

3 个答案:

答案 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条件内。所以在执行之后没有代码。