Как создать двумерный массив, с заливкой из центра по спирали?Получение ошибки: Исключение в потоке ...- 1 и 9 - PullRequest
0 голосов
/ 11 декабря 2018

Движение по спирали: влево, вниз, вправо, вверх;из центра [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");
        }
    }
}

1 Ответ

0 голосов
/ 11 декабря 2018

Окей, я решил проблему.Вот код:

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

}

...