澄清多维数组

时间:2014-08-11 06:48:23

标签: java arrays

这是我的代码,我正在尝试打印数组的值,但我没有得到正确的输出。有人能告诉我哪里出错了吗?

这是我的代码。

public class Arrrays {
    public static void main(String[] args) {
        try {   
            int arr[][] = new int[3][3];
            int i ;
            int j;
            arr[0][0]=1;  
            arr[0][1]=2;  
            arr[0][2]=3;  
            arr[1][0]=4;  
            arr[1][1]=5;  
            arr[1][2]=6;  
            arr[2][0]=7;  
            arr[2][1]=8;  
            arr[2][2]=9; 
            for(i=0;i<=3;i++)
                for(j=0;j<=3;j++)
                    System.out.println(arr[i][j]);  
        }
        catch (Exception e) {
            System.out.println("Error");
        }
    }
}

这是我得到的输出

1
2
3
Error

6 个答案:

答案 0 :(得分:3)

数组索引从0开始。所以你有索引0,1,2i3时,您会遇到错误。

那个循环应该是

for(i=0;i<3;i++){
            for(j=0;j<3;j++){

正如@ T.J.Crowder评论的那样,为了避免这种类型的混淆以及将来修正代码使用数组的长度属性。因此,虽然增加或减少数组中的元素,但循环可以工作:)

作为旁注,请养成使用{}的习惯,以避免混淆。

答案 1 :(得分:2)

你基本上是超越了最大界限。在您的情况下,数组长度为3,但因为Java中的数组是0-based。因此,从2开始,您可以查找的最大索引为0。 (即您只能访问0-2范围内的元素,而不是在索引1-3中访问它们) 更换。 :

for(i=0;i<=3;i++)
            for(j=0;j<=3;j++)
               System.out.println(arr[i][j]);  

for(i=0;i<arr.length;i++)
            for(j=0;j<arr[i].length;j++)
               System.out.println(arr[i][j]);  

甚至更好:Arrays.deepToString(arr)

答案 2 :(得分:2)

我建议你完成JLS - Chapter 10. Arrays

  

All arrays are 0-origin. An array with length n can be indexed by the integers 0 to n-1

你的循环从[0,3]开始。这意味着您将遍历此表:

  i | j
 ---+---
  0 | 0  
  0 | 1
  0 | 2
  0 | 3
  1 | 0
  1 | 1
  1 | 2
  1 | 3
  2 | 0
  2 | 1
  2 | 2
  2 | 3
  3 | 0
  3 | 1
  3 | 2
  3 | 3

计算您拥有的迭代次数。它超过了9(这是你拥有的元素数量)。

Java中的数组从零开始,这意味着如果您有一个长度为N的数组,索引将从[0, N-1]运行。

当您尝试访问数组的长度时,请尽量避免使用硬编码的数字。您只需使用数组的属性length即可。

答案 3 :(得分:1)

尝试弄明白,Exception是什么。

让我们更改您的代码如下。

 try {
        int arr[][] = new int[3][3];
        int i;
        int j;
        arr[0][0] = 1;
        arr[0][1] = 2;
        arr[0][2] = 3;
        arr[1][0] = 4;
        arr[1][1] = 5;
        arr[1][2] = 6;
        arr[2][0] = 7;
        arr[2][1] = 8;
        arr[2][2] = 9;

        for (i = 0; i <= 3; i++)
            for (j = 0; j <= 3; j++)
                System.out.println(arr[i][j]);
    } catch (Exception e) {
        System.out.println("Error" + e);
    }

让我们检查输出:

 1
 2
 3
 Errorjava.lang.ArrayIndexOutOfBoundsException: 3

现在问题是你在引用一个不存在的数组的索引(3)。

让我们检查你的迭代。

for (i = 0; i <= 3; i++) // you don't have index=3 max is 2
            for (j = 0; j <= 3; j++) // same issue here 

所以需要将其更改为

for(i = 0; i <3; i ++)                 for(j = 0; j <3; j ++)

现在问题已经解决了。

重要

处理异常时,请确保打印异常或获取堆栈跟踪。看你可以自己对问题进行排序。

答案 4 :(得分:0)

for循环中的条件错误,当您从3转到0时,您正在访问索引2。将for个循环的条件更改为:

for(i=0;i<3;i++)
    for(j=0;j<3;j++)
        System.out.println(arr[i][j]);  

答案 5 :(得分:0)

编程提交中的每个初学者的全局黄金错误使他在编程中间运行从1到数组长度(包括)的循环。这就是你的情景。

索引在大多数语言中从0到(数组长度 - 1)运行,如java / C / python / javascript / c ++