Двумерный массив Java, возвращающий NULL

Я работаю над созданием "базовой" игры connect4 с пользовательским интерфейсом. Мне трудно понять, почему, когда я звоню, чтобы распечатать «доску», я получаю взамен ноль. Я не инициализировал массив? Если да, то как мне это сделать? ~ Спасибо

Мой конструктор ...

public class Connect4{ 
    private String game[][];
    public Conncet4(String game[][]){
         this.game = game;
    }

одним из моих методов ...

public void dropChipX(int colm){    
    for(int i = 0; i<game.length;i++) {
        for(int j = 0; j<game[0].length;j++) {
            if ( j%2 == 0 )
                game[game.length-1][col] = "|";
            else
                game[i][j] = " ";
        }
    }

    if (game[game.length-1][colm] == " ")
        game[game.length-1][colm] = "X";
    else
        game[(game.length-1)-count][col] = "X";
    count++;

}

У меня также есть toString для распечатки массива

public String toString() {
    String result = "";
    for(int i = 0; i<game.length;i++) {
        for(int j = 0; j<game[0].length;j++)
            result = (game[i][j]);
        result += "\n";
    }
    return result;
}

У меня проблемы с тем, что когда я запускаю свой main, он возвращает null

public class Connect4TextConsole {

public static void main(String[] args) {

    String fun[][] = new String[6][15];
    Connect4 connect = new Connect4(fun);

    connect.dropChipX(3);
    System.out.print(connect);
    connect.dropChipY(2);
    System.out.print(connect);
}

}

В вашем коде так много ошибок. Начиная с опечаток, после этого вы сравниваете String с == вместо compare, тогда вы не объявляете некоторые из переменных (например, count ... Мой вам совет - отлаживать свой код. Отладка является важным навыком каждого программиста должен есть. Удачи.

zlakad 01.10.2018 19:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
50
1

Ответы 1

Я бы посоветовал вам пересмотреть этот код:

public class Connect4{ 
    private String game[][];
    public Conncet4(String game[][]){
         this.game = game;
    }
}

Вы должны сделать защитную копию этого 2D-массива внутри конструктора.

Любой код, который дал вам ссылку на 2D-массив игры, переданный конструктору, может изменить эту изменяемую ссылку. Ваше личное имя ничего не значит.

Очень хороший совет! Но в коде OP слишком много ошибок, как логических, так и синтаксических ...

zlakad 01.10.2018 19:44

Согласовано. Я обращаюсь к чему-то помимо его вопроса.

duffymo 01.10.2018 19:48

Другие вопросы по теме