如何创建一个二维数组,从螺旋线的中心填充?获取错误:线程中出现异常-1和9



螺旋的运动:左、下、右、上;从中心[4][4]。。。我写了代码,但遇到了几个错误,即:

线程"main"java.lang.ArrayIndexOutOfBoundsException异常:-1和9

代码行13:mx[i][j--] = k;(以及其他代码,如28…(。我只是不明白我做错了什么,也不明白编译器为什么在这里看到错误。

public class FoLab {
public static void main(String[] args) {
int[][] mx = new int[9][9];
int i, j, k = 1, n = 1, b;
for (i=0; i < 9; i++)
for (j = 0; j < 9; j++) {
i = 4;
j = 4;
if (n % 2 != 0) { //if odd
for (b = 0; b <= n; b++) {
mx[i][j--] = k; //go left
k++;
}
for (b = 0; b <= n; b++) {
mx[i++][j] = k; //go down
k++;
}
n++; //number of steps after "left + down" is increasing by 1, making it even
}
else { //if even
for (b = 0; b <= n; b++) {
mx[i][j++] = k; //go right
k++;
}
for (b = 0; b <= n; b++) {
mx[i--][j] = k; //go up
k++;
}
n++; //number of steps after "right + up" is increasing, making it odd
}
}
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++)
System.out.printf(" %02d ", mx[i][j]);
System.out.println("n");
}
}
}

好的,我解决了这个问题。这里的代码:

public class Experiment {
public static void main(String[] args) {
int[][] mx = new int[9][9];
int i, j=1, k = 1, n = 1, b;
for (i=1; i < 81; i++)
if (n % 2 != 0) { //if odd
for (b = 0; b <= n; b++) {
mx[i][j--] = k; //left
k++;
}
for (b = 0; b <= n; b++) {
mx[i++][j] = k; //down
k++;
}
n++; //after "left, down" number of steps increasing by 1, making it even
}
else { //if even
for (b = 0; b <= n; b++) {
mx[i][j++] = k; //right
k++;
}
for (b = 0; b <= n; b++) {
mx[i--][j] = k; //up
k++;
}
n++; //after "right, up" number of steps increasing by 1, making it odd
}
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++)
System.out.printf(" %02d ", mx[i][j]);
System.out.println("n");
}
}

}

相关内容

最新更新