首先,初学者在这里。
我正在使用此代码。
class MDArrays {
public static void main(String[] args) {
int[][] x;
int t=2;
x = new int[2][3];
for(int i=0; i<=1; i++) {
for(int j=0; i<=2; j++) {
x[i][j] = t;
t += 2;
System.out.println(x[i][j]);
}
}
}
}
它编译完美,但在运行时,正确显示3个数字后,我收到以下错误。
Exception in thread "main" java.Lang.ArrayindexOutOfBoundsException : 3 at MDArrays.main(MDArrays.java:13)
我哪里错了?
答案 0 :(得分:8)
在检查i时,您正在递增j。
for(int j=0; i<=2; j++)
j将继续递增,最终会给你一个IndexOutOfBoundsException
答案 1 :(得分:3)
for(int j=0; i<=2; j++) {
你的问题。尝试:
for(int j=0; j<=2; j++) {
答案 2 :(得分:3)
我会这样写:
class MDArrays
{
private static final int ROWS;
private static final int COLS;
private static final int START_VALUE;
private static final int INC_VALUE;
static
{
ROWS = 2;
COLS = 3;
START_VALUE = 2;
INC_VALUE = 2;
}
public static void main(String[] args)
{
final int[][] x;
int t;
x = new int[ROWS][COLS];
t = START_VALUE;
for(int row = 0; row < x.length; row++)
{
for(int col = 0; col < x[row].length; col++)
{
x[row][col] = t;
t += INC_VALUE;
System.out.println(x[row][col]);
}
}
}
}
主要区别在于我使用.length成员而不是硬编码值。这样,如果我将其更改为x = new int[3][2];
,那么代码会神奇地工作并保持在其范围内。
另一个很大的区别是我使用row / col而不是i / j。 i / j很好(和传统的),但我发现在处理数组数组(Java实际上没有多维数组)时,如果我使用更有意义的行/ col,则更容易跟踪事物(帮助阻止你做for(int col = 0; row < x.length; col++)
这样的事情......顺便提一下,这就是你的错误。