Android java for循环突然中断

时间:2014-07-06 12:04:32

标签: java android for-loop

我运行了以下代码:

public static Level getNextLevel(Context context, int id)
{
    boolean found = false;
    ArrayList<Level> levels = getLevels(context);
    for(Level lvl : levels)
    {
        if (found)
        {
            return lvl;
        }
        if (lvl.id==id)
        {
            found=true;
        }
    }
    return null;
}

当我跟踪它时,第二个if工作和变量发现变为真,然后另一个迭代进行,当它到达“if(found)”行时,我检查并且变量found是真的,但它然后打破了for阻止而不是进入if块!

ArrayList级别有5个项目,它会在检查完第一个项目后发生。

为什么会出现这种情况的任何建议?

5 个答案:

答案 0 :(得分:1)

您的方法getNextLevel()尝试生成ArrayList<Level> levels中等于id的条目的后继者。但是,如果id与最后一个条目匹配,则for循环结束,您将获得null

答案 1 :(得分:0)

你说found在第一次迭代时变为真,然后逻辑上下一次迭代将进入第一次if并调用return l,这意味着你的循环将停止。

所以问题是:第一次迭代是否应该将found设置为true?

答案 2 :(得分:0)

编辑: 在进一步检查了您的问题后,您似乎想要完全删除return 1;。因为你的for循环实际进入if (found)块,但返回强制它存在循环和整个方法。

答案 3 :(得分:0)

仅供参考,返回的“l”未找到“l” 因为它是在下一个循环中返回的,这是arraylist中的下一个项目

无论如何,我建议你采用这样的方法

public static Level getNextLevel(Context context, int id){
    //boolean found = false; no need
    ArrayList<Level> levels = getLevels(context);
    for(Level lvl : levels)
    {
        if (lvl.id==id)
        {
             return lvl ;
        }
    }
    return null;
}

我用lvl替换l使其清楚,它看起来1和l在某些字体上看起来相似。

答案 4 :(得分:0)

您的代码看起来不错

    boolean found = false;
    ArrayList<Level> levels = getLevels(context);
    for(Level lvl : levels)
    {
        if (found)
        {
            return lvl;
        }
        if (lvl.id==id)
        {
            found=true;
        }
    }
    return null;

您可以尝试按照您想要实现的目标进行循环

for(int i=0; i<levels.size()-1; i++){
   if(levels.get(i).id ==id )
   {
     return levels.get(i+1);
   }


}