繁体   English   中英

澄清多维数组

[英]Clarification on multi-dimensional 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

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

该循环应为

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

正如@TJCrowder所评论的那样,为避免这种类型的混淆并为将来的代码更正使用array的length属性。 这样,尽管您增加或减少了数组中的元素,但循环仍然有效:)

另外,请养成使用{}的习惯,以免造成混淆。

您基本上已经超出了最大限制。 在您的情况下,数组长度为3 ,但是因为Java中的数组基于0 因此,您可以查找的最大索引为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)

我建议您仔细阅读JLS-第10章。数组

所有数组均为0起点。 长度为n的数组可以用0到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

尝试弄清楚,什么是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

现在的问题是,您正在引用不存在的数组的index(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 

因此需要将其更改为

对于(i = 0; i <3; i ++)对于(j = 0; j <3; j ++)

现在问题已解决。

重要

处理异常时,请确保要打印异常或获取堆栈跟踪。 看到您可以按照自己的方式对问题进行排序。

for循环中的条件是错误的,当索引从0变为2时,您正在访问索引3 将两个for循环的条件都更改为此:

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

每个编程初学者都会犯的全局性黄金错误,使他在编程中处于中间状态,正在运行从1到array(含)长度的循环。 那就是你的情况。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM