这是我的代码,我正在尝试打印数组的值,但我没有得到正确的输出。有人能告诉我哪里出错了吗?
这是我的代码。
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 :(得分:3)
数组索引从0
开始。所以你有索引0,1,2
。 i
为3
时,您会遇到错误。
那个循环应该是
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 ++