Проблема с доступом к элементам 2-мерного массива (генерируется только один столбец). - JAVA - PullRequest
2 голосов
/ 06 августа 2020

в моем последнем проекте для вводного курса программирования, и у меня возникает небольшая проблема, когда я пытаюсь распечатать / изменить / получить доступ к элементам в 2D-массиве. Короче говоря, я создаю игру connect four, и мне были даны несколько полных и несколько неполных классов для создания игры.

Один из методов в классе столбца (который содержит второй массив значений char, также называемый столбцом), называется get, а код выглядит следующим образом:

public char get(int row) {
    row = height;
    
    if(row < 7 && row > 0) {
        System.out.println(column[row]);
        return column[row]; 
    } else {
        char invalid = ' ';
        return invalid; 
    }
}

В настоящее время игра запрашивает у пользователя имя для присвоения классу Player, а затем отображает game перед тем, как также предложить пользователю ввести номер столбца, чтобы добавить свой жетон (X) на доску, автоматически добавив его в конец столбца. Код для метода makeMove:

public boolean makeMove(int column, char token) {
    boolean success = false;
    char columnConverter = (char)column; 
    
    if(column > 7 && column < 1) {
        System.out.println("Sorry, that's not a valid column!");
        success = false;
    } else {
        board[column].put(token);
        System.out.println(board[column].put(token));
        success = true;
    }
    return success;
}

И код для фактического размещения токена:

public boolean put(char token) {
    if (height <= MAX_HEIGHT) { 
    column[height] = token;
    height++;
    return true;
    } else {
        return false; 
    }
}

Когда я вызываю метод отображения для игры, вывод (и код вверху) выглядит следующим образом:

public void display() {
    System.out.println("1 2 3 4 5 6 7");
    
    for(int i = 0; i < board.length; i++) {
        for(int j = 0; j < NUM_ROWS; j++)
            System.out.println("[" + board[i].get(j) + "]");
    }
    
    System.out.println("1 2 3 4 5 6 7");
}

ВЫХОД:

Welcome to Nibble Nabble! What's your name?
Alex
1 2 3 4 5 6 7
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
1 2 3 4 5 6 7
Alex > 0
true

Из-за этого я почти уверен, что проблема связана с методом get, но я полностью потерялся что нужно исправить. Я также получаю исключение ArrayIndexOutOfBoundsException, если ввожу любое значение выше 0 для пользовательской подсказки.

1 Ответ

0 голосов
/ 06 августа 2020

Одна вещь, которую вам почти наверняка нужно исправить, - это НЕ печатать символ новой строки после каждого элемента. Печатайте новую строку только в конце каждой строки. Вероятно, вам следует удалить println из метода get, я думаю, что он вас больше портит, чем помогает.

public void display() {
    System.out.println("1 2 3 4 5 6 7");
    
    for(int i = 0; i < board.length; i++) {
        for(int j = 0; j < NUM_ROWS; j++)
            System.out.print("[" + board[i].get(j) + "] ");
        System.out.println("");
    }
    
    System.out.println("1 2 3 4 5 6 7");
}

Это очистит ваш вывод и позволит вам лучше видеть, где другие проблемы ар.

...