【问题标题】:Java - Error in Enhanced for loopJava - 增强 for 循环中的错误
【发布时间】:2016-03-23 16:37:19
【问题描述】:

我刚开始学习java。看看我的代码,使用增强的 for 循环将 1 添加到 2D 数组的每个元素。我还在eclipse中附上了我的代码图片。Code for Enhanced for loop

package multi_array;

public class MainClass {

public static void main(String args[]){
    int array[][]={{1,2,3}, {4,5,6}, {7,8,9}};
    add_1(array);
}

public static void add_1(int a[][]){
    for(int[] a_row: a){
        for(int i: a_row){
            a_row[i]+=1;
        }
    }

    for(int[] a_row: a){
        for(int i: a_row){
            System.out.print(a_row[i]+"\t");
        }
        System.out.println("\n");
    }

}
}

现在,当我尝试运行程序时,我收到下面显示的错误消息。我还附上了错误信息的图片。Error message

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at multi_array.MainClass.add_1(MainClass.java:12)
    at multi_array.MainClass.main(MainClass.java:6)

如何更正此代码?

好的朋友们,首先对我的代码缩进很抱歉,毕竟这是我在stackoverflow上的第一个问题。我通过替换得到了正确的结果

for(int i: a_row){
    a_row[i]+=1;
}

用代码

for(int i=0; i<a_row.length; i++){
    a_row[i]+=1;
}

但我只是想知道仅使用 foreach 循环是否可以得到想要的结果。

【问题讨论】:

  • 为什么你的语言标签会向这个问题发送垃圾邮件?
  • 你应该直接复制粘贴代码并返回错误而不是提供截图。
  • 你使用数组元素作为它的索引而不是
  • 阅读更多关于 java 中数组的信息,代码中的 int i 是数组的值而不是索引。
  • for(int i: a_row){ --> for(int i=0; i &lt; a_row.length; ++i){

标签: java arrays


【解决方案1】:

a_row 包含二维数组的所有行,您是 访问a_row[i] 其中i 行的值,你没有a_row[3]
在您的代码更改如下

 for(int[] a_row: a){
    for(int index=0; index < a_row.length; index++){
        a_row[index]+=1;
    }
}

for(int[] a_row: a){
    for(int i: a_row){
        System.out.print(i+"\t");
    }
    System.out.println("\n");
}

【讨论】:

  • 好的,我只用 i 替换了 a_row[i]。但现在我得到了简单的二维数组,而不是向数组的每个元素加 1,即,我得到分配给数组的数字,而不是每个元素加 1。
  • 我得到了正确的答案,只是使用了你所说的普通 for 循环。但我只是想知道我是否可以仅借助增强的 for 循环来做到这一点。
  • 您所做的是更改放置它的数组的值,而这只能通过更改 objects[index] 指向的位置来完成,这只能通过使用 objects[index] 来完成.
【解决方案2】:

您的问题是 i 的值大于您的数组中的条目。

您遇到此问题是因为您在循环中使用数组的实际元素作为索引。

当我查看您的方法名称时,我认为您只想增加数组中的每个整数。

您可以通过这样做来修复您的代码:

    for(int[] a_row: a)
    {
        for(int i:a_row)
        {
            i += 1;
        }
    }

我认为您应该阅读 foreach-loops 的工作原理。已经有一个很好的问题可以很好地回答这个主题:here

【讨论】:

  • 好的,我只用 i 替换了 a_row[i]。但是现在我得到了简单的二维数组,而不是向数组的每个元素加 1,即,我得到分配给数组的数字,而不是每个元素加 1。
猜你喜欢
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
相关资源
最近更新 更多