[英]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,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.