2013-02-17 3 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

Вы пробовали изменения Int в Integer в цикле Foreach? Есть разница. Один из них является примитивным, а один - объектом, поэтому это может быть вашей проблемой. –

+0

Каков размер вашего ArrayList? – afrischke

+0

Когда вы говорите для (ArrayList item: used) // Не выполнено – smk

ответ

2

вы делаете новый ArrayList

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

который пуст.

Когда бег работает, ему нечего перебирать. Поэтому ваш комментарий «не исполняет» замечательно.

Первый цикл, однако, зависит от того, что именно передается. Поместите некоторых печатных statemtents, чтобы выяснить размер списка. Скорее всего, это тоже 0, что опять же заставляет цикл «пропустить».

+0

А, ну есть проблема, тогда ... Lemme исправить это и посмотреть, работает ли оно. – Thrfoot

+1

Хорошо, он работает. Благодаря! – Thrfoot

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

}