0

由于某种原因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 可以避免执行循环。我错过了一些明显的东西吗?

4

4 回答 4

3

是的,你遗漏了一些明显的东西。

如果这些循环没有执行,则传递给例程的参数中没有元素。

于 2013-02-17T03:23:07.350 回答
2

你制作了一个新的 ArrayList

ArrayList<Integer> existing = new ArrayList<Integer>();

这是空的。

当 foreach 运行时,它没有可迭代的内容。因此,您的“未执行”评论是完全有效的。

然而,第一个循环取决于传递的具体内容。把一些打印语句算出List的大小。最有可能的是,这也是 0,这再次导致循环被“跳过”。

于 2013-02-17T03:22:28.953 回答
1

的大小used必须为 0,并且第二个循环未执行,因为existing它是一个新的 ArrayList,其大小肯定为 0

于 2013-02-17T03:25:06.977 回答
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;
      }

}
于 2013-02-17T03:29:07.617 回答