2013-02-17 117 views
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可以在现在之前避免执行循环。我错过了明显的东西吗?

+0

您是否尝试过在你的foreach循环变化的int整数?它们是有区别的。一个是原始的,一个是对象,所以这可能是你的问题。 – 2013-02-17 03:21:39

+0

ArrayList的大小是多少? – afrischke 2013-02-17 03:22:23

+0

当你说(ArrayList 项目:使用)//未执行 – smk 2013-02-17 03:23:18

回答

2

你做一个新的ArrayList

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

里面是空的。

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

但是,第一个循环取决于传递的是什么。让一些print statemtents找出列表的大小。最有可能的是,也是0,这也是导致循环被“跳过”的原因。

+0

啊,那么有问题,然后......让我解决这个问题,看看它是否工作。 – Thrfoot 2013-02-17 03:26:25

+1

好的,让它工作。谢谢! – Thrfoot 2013-02-17 03:37:26

3

是的,你错过了一些明显的东西。

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

1

大小used必须是0,第二个循环不执行,因为existing是一个新的ArrayList和它的规模肯定是0

0

这里工作code..this会给你的想法。正如其他mentioned..there也不会有任何元素迭代...因为我跑了下面的代码,并为每个循环的作品...

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

}