对于每个不执行的循环

时间:2013-02-17 03:19:59

标签: java loops foreach

由于某些原因,我的方法中的所有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 个答案:

答案 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;
      }

}