有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 and 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");
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

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

    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");
        }
    }
    

    }