【问题标题】:for each loop exception对于每个循环异常
【发布时间】:2012-04-02 11:04:51
【问题描述】:

我的第二个打印行出现异常。

int num[] = {50,20,45,82,25,63};
System.out.print("Given number : ");
for(int d:num){
System.out.print("  " + num[d]);
}

控制台输出是

Given number : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50

为什么 d 不取所有数组元素而只取 50 个?

【问题讨论】:

  • 当你使用 foreach 语法时:for(int d : num){ // etc } d 不是索引,它是已经被索引的值!!

标签: java arrays foreach


【解决方案1】:

for(int d:num) 循环中,每个项目都由d 表示,而不是num[d]

所以,这就是应该怎么做的。

for(int d:num){
    System.out.print("  " + d);
}

简单的试运行会告诉你哪里出错了。

对于第一个循环,您的语句将归结为 num[50],这在任何地方都不可用,因此您会遇到异常。


但是,如果您尝试使用索引,那么下面的一个简单技巧就可以解决问题

int index = 0;
for(int d:num){
    System.out.print("  " + num[index++]);
}

但老实说,这不是解决问题的正确方法。

【讨论】:

    【解决方案2】:

    对于每个循环 num[any index] 不是必需的。它只是从第一个索引检索到最后一个索引,并将它们中的每一个分配给变量 d。所以你只需要打印值 d。

    for(int d:num){
    System.out.print("  " + d);
    }
    

    【讨论】:

      【解决方案3】:

      使用增强的 for 循环,您可以直接在示例中使用变量“d”:

      System.out.print(d);
      

      您获得 ArrayIndexOutOfBound 的原因是 num[d] 在第一次迭代时尝试访问数组中的第 50 位。 (超出范围)。

      【讨论】:

        【解决方案4】:

        你不应该在使用每个循环时使用数组索引。

        在您的代码中,

        int num[] = {50,20,45,82,25,63};
        System.out.print("Given number : ");
        for(int d:num)
        {
            System.out.print("  " + num[d]);
        }
        

        在第一次迭代中将产生d = 50,这是您想要的结果。如果使用num[d],会导致num[50],这是错误的索引。

        改为使用下面的代码

        for(int d:num)
        {
            System.out.print("  " + d);
        }
        

        【讨论】:

          【解决方案5】:

          您可能想编写如下代码。

          for(int d:num){
          System.out.print("  " + d);
          }
          

          How does the Java 'for each' loop work?

          【讨论】:

            猜你喜欢
            • 2020-10-09
            • 2017-01-03
            • 2013-11-22
            • 2020-05-11
            • 1970-01-01
            • 1970-01-01
            • 2011-07-15
            • 2017-12-16
            • 1970-01-01
            相关资源
            最近更新 更多