Как заставить эту доску распечатывать так, как я хочу? - PullRequest
0 голосов
/ 01 мая 2020

Всего noob to java, и у меня есть домашнее задание, где мне нужно сделать нестандартную игру в шахматы, но я даже изо всех сил пытаюсь напечатать игровую доску, в которой я пробую все пустые места, чтобы быть с "X". Мой текущий "код":

public class Chess {

    public static void main(String[] args) {
        String[][] board = new String[7][7];
        fillBoard(board);


    }
    public static void fillBoard(String[][] board){
        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 7; j++) {
                board[i][j] = "X";
                System.out.print(Arrays.deepToString(board));
            }
            System.out.println();
        }
    }
}

Он распечатывает: Это

Когда я хочу его распечатать: Это

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Прочитав ваши комментарии, я понял, что речь идет не только о печати массива, который вас беспокоит; скорее, вы обеспокоены тем, как вы сможете получить к нему доступ позже. Решение проблемы неправильной печати уже было предоставлено в комментариях, т.е. замена System.out.print(Arrays.deepToString(board)); на System.out.print("X");. Я объясняю здесь другую часть (то есть, как получить к ней доступ позже), а также некоторую дополнительную информацию, которая поможет вам в разработке вашего приложения.

  1. Когда вы передаете и изменяете массив каким-либо методом, Массив также будет изменен для вызывающего метода (отметьте this , чтобы узнать больше об этом). Это означает, что когда board[][] будет изменено в fillBoard, вы получите измененное board[][] в main.
  2. Согласно принципу единственной ответственности , модуль / Метод fillBoard должен делать только одну вещь - заполнение доски. Не следует также делать печать (дополнительная вещь). Вы должны написать другой метод для печати. ​​
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[][] board = new String[7][7];
        fillBoard(board);
        displayBoard(board);
    }

    static void fillBoard(String[][] board) {
        for (String[] row : board) {
            Arrays.fill(row, "X");
        }
    }

    static void displayBoard(String[][] board) {
        for (String[] row : board) {
            for (String cell : row) {
                System.out.print(cell);
            }
            System.out.println();
        }
    }
}

Вывод:

XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX

Дополнительные примечания:

2-D массив - это массив 1-D-массивов, и поэтому есть много способов, которыми вы можете написать приведенный выше код, например,

static void fillBoard(String[][] board) {
    for (int i = 0; i < board.length; i++) {
        Arrays.fill(board[i], "X");
    }
}

или использование расширенного for l oop:

static void fillBoard(String[][] board) {
    for (String[] row : board) {
        Arrays.fill(row, "X");
    }
}

или без использования Arrays.fill:

static void fillBoard(String[][] board) {
    for (int i = 0; i < board.length; i++) {
        for (int j = 0; j < board[i].length; j++) {
            board[i][j] = "X";
        }
    }
}

Аналогично, метод, displayBoard можно записать в виде:

static void displayBoard(String[][] board) {
    for (int i = 0; i < board.length; i++) {
        for (int j = 0; j < board[i].length; j++) {
            System.out.print(board[i][j]);
        }
        System.out.println();
    }
}

Примечание , которое я использовал board.length и board[i].length вместо 7 для количества строк и 7 для количество столбцов, чтобы вам не приходилось менять его каждый раз при изменении размера массива.

1 голос
/ 01 мая 2020

Просто напечатайте значение позиции напрямую.

 public static void fillBoard(String[][] board){
            for (int i = 0; i < 7; i++) {
                for (int j = 0; j < 7; j++) {
                    board[i][j] = "X";
                    System.out.print(board[i][j]);
                }
                System.out.println();
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...