有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android java for循环突然中断

我正在运行以下代码:

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起作用,找到的变量变为true,然后进行另一次迭代,当它到达“if(find)”行时,我检查发现的变量为true,但它随后中断for块,而不是进入if块

ArrayList级别有5项,它发生在选中第一项之后

有什么建议可以解释为什么会发生这种情况吗


共 (5) 个答案

  1. # 1 楼答案

    您的方法getNextLevel()尝试在ArrayList<Level> levels中生成等于id的项的后续项。但是如果id与最后一个条目匹配,那么for循环结束,得到null

  2. # 2 楼答案

    你的代码看起来不错

        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);
       }
    
    
    }
    
  3. # 3 楼答案

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

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

  4. # 4 楼答案

    编辑: 在进一步检查您的问题之后,您似乎希望完全删除return 1;。由于for循环实际上进入了if (found)块,但返回将强制它存在于循环和整个方法中

  5. # 5 楼答案

    仅供参考,返回的“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;
    }
    

    我把l换成了lvl,这很清楚,在一些字体上它看起来像1和l