【问题标题】:For each loops not executing对于每个未执行的循环
【发布时间】:2013-02-17 03:19:58
【问题描述】:

由于某种原因,我的方法中的所有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 可以避免执行循环。我错过了什么明显的东西吗?

【问题讨论】:

  • 您是否尝试过在 Foreach 循环中将 int 更改为 Integer?它们是有区别的。一个是原始的,一个是对象,所以这可能是你的问题。
  • 你的 ArrayList 的大小是多少?
  • 当你说 for (ArrayList item : used) // 不执行

标签: java loops foreach


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你创建了一个新的 ArrayList

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

    这是空的。

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

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

    【讨论】:

    • 啊,那么问题就来了……让我修复它,看看它是否有效。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      这是工作代码..这会给你想法。正如其他人提到的那样......不会有任何元素可以迭代......因为我运行了下面的代码并且每个循环都有效......

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        • 2020-05-11
        • 1970-01-01
        • 1970-01-01
        • 2020-04-06
        • 2014-05-04
        • 2019-01-24
        相关资源
        最近更新 更多