由于某些原因,我的方法中的所有for-each
循环都被完全忽略,我无法弄清楚原因。这是我的代码:
private static boolean notUsed(ArrayList<Integer> check, ArrayList<ArrayList<Integer>> used)
{
boolean c1 = false;
boolean c2 = true;
for (ArrayList<Integer> item : used) // Not executed
{
System.out.println("It works!");
Collections.sort(item);
Collections.sort(check);
if (check.equals(item)) c1 = true;
}
ArrayList<Integer> existing = new ArrayList<Integer>();
for (int item : check)
{
for (int exists : existing) // Not executed
{
if (exists == item)
{
c2 = false;
break;
}
else existing.add(item);
}
if (c2 == false) break;
}
if (c1 && c2) return true;
else return false;
}
过去15分钟我一直在讨论它,但却没有看到为什么代码拒绝打扰循环的内容。事实上,我甚至不知道java之前可以避免执行循环。我错过了一些明显的东西吗?
答案 0 :(得分:3)
是的,你错过了一些明显的东西。
如果这些循环没有执行,那么传递给例程的参数中没有元素。
答案 1 :(得分:2)
你制作一个新的ArrayList
ArrayList<Integer> existing = new ArrayList<Integer>();
是空的。
当foreach运行时,没有任何东西可以迭代。因此,您的“未执行”评论完全有效。
然而,第一个循环取决于确切传递的内容。放一些打印状态计算出List的大小。最有可能的是,这也是0,这又导致循环被“跳过”。
答案 2 :(得分:1)
used
的大小必须为0且第二个循环未执行,因为existing
是一个新的ArrayList且其大小肯定为0
答案 3 :(得分:0)
这是工作代码..这会给你一个想法。正如其他人提到的那样......没有任何元素可以迭代...因为我运行了下面的代码并且每个循环都有效...
import java.util.ArrayList;
import java.util.Collections;
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> used = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer>item = new ArrayList<Integer>();
item.add(1);
used.add(item);
notUsed(item,used );
}
private static boolean notUsed(ArrayList<Integer> check, ArrayList<ArrayList<Integer>> used)
{
boolean c1 = false;
boolean c2 = true;
for (ArrayList<Integer> item : used) // Not executed
{
System.out.println("It works!");
Collections.sort(item);
Collections.sort(check);
if (check.equals(item)) c1 = true;
}
ArrayList<Integer> existing = new ArrayList<Integer>();
for (int item : check)
{
for (int exists : existing) // Not executed
{
if (exists == item)
{
c2 = false;
break;
}
else existing.add(item);
}
if (c2 == false) break;
}
if (c1 && c2) return true;
else return false;
}
}