-2
(int i=0; i < n; i++){
for(int j=0; j < n; j++){
    Array[i][j]=Array[i][j] + 1;
    }
}

出于某种原因,我收到了一个错误。Array 是一个用 0 填充的 int 数组。n 可以是任意大小。我不断收到的错误是 Array 行的主线程中的异常。我没有正确地将 1 添加到数组中吗?

编辑:错误在线程“main”java.lang.ArrayIndexOutofBoundsException中被称为异常:3 at(那一行是)

编辑:它被初始化为

       Array = new int[n][n];
    for(int i=0; i < n; i++){
        for(int j=0; j < n; j++){
            Array[i][j] = 0;
        }
    }

但这似乎不是错误的一部分

4

3 回答 3

5

编辑:错误在线程“main”java.lang.ArrayIndexOutofBoundsException中被称为异常:3

对。这意味着您的阵列不够大。不清楚第一个维度是只有 2 还是第二个维度,但其中一个是不正确的。你应该有类似的东西:

int[][] array = new int[n][n];

某处。如果你没有,你应该看看你实际上有什么。

一个更好的选择 - 将使用for循环中数组的长度作为界限:

for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array[i].length; j++) {
        array[i][j] = array[i][j] + 1;
    }
}

甚至:

for (int i = 0; i < array.length; i++) {
    int[] row = array[i];
    for (int j = 0; j < row.length; j++) {
        row[j] = row[j] + 1;
    }
}

或者:

for (int i = 0; i < array.length; i++) {
    int[] row = array[i];
    for (int j = 0; j < row.length; j++) {
        row[j]++;
    }
}

编辑:您现在声称它确实是这样初始化的:

Array = new int[n][n];

如果是这种情况,那么n自初始化以来 的值肯定已经改变,所以它实际上是无关紧要的。如果 的值n没有改变,您的原始代码根本不会抛出该异常。

于 2013-04-10T18:31:19.910 回答
2

使用适当的长度,Array.length将是 1d 的长度Array并且Array[i].length是 2d 的长度 -

for(int i=0; i < Array.length; i++){
    for(int j=0; j < Array[i].length; j++){
        Array[i][j]=Array[i][j] + 1;
    }
}
于 2013-04-10T18:32:04.050 回答
0

如果它真的是这样初始化的:

int[][] Array;
Array = new int[n][n];
for(int i=0; i < n; i++){
    for(int j=0; j < n; j++){
        Array[i][j] = 0;
    }
}

如果两者之间都没有改变,Arrayn没有改变,那么下面的代码起作用:Array[i]i

for(int i=0; i < n; i++){
    for(int j=0; j < n; j++){
        Array[i][j]=Array[i][j] + 1;
    }
}

所以要么你的代码改变了提到的事情之一,要么你的问题是假的......

(顺便说一句:我强烈建议称它为Array不同,至少称它为array......)

于 2013-04-10T19:59:27.273 回答