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 が実行されるとき、反復するものは何もありません。したがって、「実行していません」というコメントは完全に有効です。

ただし、最初のループは、正確に何が渡されるかによって異なります。リストのサイズを把握するいくつかの印刷ステートメントを配置します。ほとんどの場合、これも 0 であり、ループが「スキップ」されます。

于 2013-02-17T03:22:28.953 に答える
1

のサイズは 0 でなければならず、 は新しい ArrayList であり、そのサイズは確実に 0 であるusedため、2 番目のループは実行されていませんexisting

于 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 に答える