我运行了以下代码:
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个项目,它会在检查完第一个项目后发生。
为什么会出现这种情况的任何建议?
答案 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);
}
}