【问题标题】:Minimum number of elements Enhanced for-loop in Java [duplicate]Java中的最小元素数增强的for循环[重复]
【发布时间】:2015-10-13 21:26:38
【问题描述】:

我正在尝试运行此增强型 for 循环,但它会引发错误。当我将数组中的元素数量增加到 8 时,它就可以工作了。数组中是否有最少数量的元素才能工作?

public class Demo {
    public static void main(String[] args){
        int numbers[];
        numbers = new int[] {5,6,7,5,5};

        for(int i : numbers){
            System.out.println(numbers[i]);
        }
    }
}

【问题讨论】:

    标签: java loops for-loop


    【解决方案1】:

    不,它没有最小数量的元素才能工作;你误解了它的作用。分配给i 的值是数组中的值,而不是数组中的索引,但您将这些值视为索引,并且在 5 个元素的数组中,索引7(或5 或@987654324 @) 不存在。这也是为什么放置 8 个元素时它会起作用的原因;索引7 现已存在。

    只需打印i。这就是价值。

    System.out.println(i);
    

    您可能需要考虑将i 重命名为value,或number,或其他更能表明其含义的名称,以避免混淆,因为i 通常用于标准for 中的索引变量循环。

    【讨论】:

    • 也许建议将i 重命名为number,因为i 是为索引变量“保留”(按照惯例),这是造成混乱的原因。
    【解决方案2】:

    打印 i。不是数字[i] i 是实际值而不是数组中的项目索引,例如没有数字[5],这将引发异常

    【讨论】:

      【解决方案3】:

      这段代码包含一个简单的逻辑错误:

      for(int i : numbers){ //<-- loop over all integers in numbers (i will hold the value in the array
          System.out.println(numbers[i]); //<-- get the element at position i
      }
      

      基本上,您的代码会在数组中执行以下读取序列:

      numbers[5]
      numbers[6]
      numbers[7]
      ...
      

      决定是使用直接迭代数组中所有元素的 foreach 循环 (for(int i : numbers)) 并简单地打印迭代中的值 (System.out.println(i)),还是迭代 索引[0 , numbers.length) 并使用System.out.println(numbers[i])

      您遇到的“最小数”仅仅是因为 7 是数组中的最大数,因此数组的长度必须至少为 8 才能访问 numbers[7] 而不会引发任何异常.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-20
        • 1970-01-01
        • 1970-01-01
        • 2013-05-13
        • 2015-12-13
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        相关资源
        最近更新 更多