Невозможно сослаться на заполненный 2D массив - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь завершить sh этот волшебный * квадратный проект c, но при заполнении квадрата он ссылается на пустую переменную экземпляра, а не на файл с определенным размером, и я не могу его исправить.

В строке 22 указано нулевое значение ошибки.

Может кто-нибудь помочь мне с этим?


public class MagicSquare {
    private int[][] magicSquare;

    public MagicSquare(int size){
        int[][] magicSquare = new int[size][size];
        fillSquare(size);
    }
    private void fillSquare(int size){
        int row = size - 1;
        int col = size / 2;
        magicSquare[row][col] = 1;

        for (int i = 2;i < size * size;++i){
            if (magicSquare[(1 + row) % size][(col + 1) % size] == 0){
                row = (1 + row) % size;
                col = (1 + col) % size;
            }
            else {
                row = ( row - 1 + size) % size;
            }
            magicSquare[row][col] = i;
        }
    }
    public void toString(int size){
        for (int i = 0; i < size;++i){
            for (int j = 0; j < size;++j){
                System.out.println(magicSquare[i][j]);
            }
        }

    }

}



1 Ответ

0 голосов
/ 18 февраля 2020

не инициализируйте magicSquare в int[][] magicSquare = new int[size][size];

, который перебирает глобальный экземпляр magicSquare,

ваш код должен выглядеть следующим образом:

 public class MagicSquare {
        private int[][] magicSquare;

        public MagicSquare(int size){
            magicSquare = new int[size][size];
            fillSquare(size);
        }
        private void fillSquare(int size){
            int row = size - 1;
            int col = size / 2;
            magicSquare[row][col] = 1;

            for (int i = 2;i < size * size;++i){
                if (magicSquare[(1 + row) % size][(col + 1) % size] == 0){
                    row = (1 + row) % size;
                    col = (1 + col) % size;
                }
                else {
                    row = ( row - 1 + size) % size;
                }
                magicSquare[row][col] = i;
            }
        }
        public void toString(int size){
            for (int i = 0; i < size;++i){
                for (int j = 0; j < size;++j){
                    System.out.println(magicSquare[i][j]);
                }
            }

        }

    }
...