如何修改后打印printBoard?

问题描述

我写了一个TicTacToe游戏。

在这里,我使用3x3创建一个char [][] board表,然后调用方法printBoard()。例如,我输入了X_X_O____,并用这些字符打印该表。

changeBoard()方法中,我想输入board[][]的坐标,如果有字符_,则将其替换为X。我在编译时给出了坐标,以查看坐标为_,但是当调用方法printBoard()时,控制台将打印相同的电路板而没有任何更改。因为我不知道自己在做什么错,您能帮我吗?

import java.util.Scanner;

public class TicTacToe {
     private char[][] board = new char[3][3];
     private String state;
     private int n;
     private int m;
     private int i;
     private int j;
     Scanner sc = new Scanner(system.in);
     public TicTacToe() {
         System.out.print("Enter cells: ");
         this.state = sc.nextLine();
     }
 
     public void printBoard() {
         int nextChar = 0;
         System.out.println("---------");
         for (i = 0; i < 3; i++) {
             System.out.print("| ");
             for (j = 0; j < 3; j++) {
                 board[i][j] = state.charat(nextChar++);
                 System.out.print(board[i][j] + " ");
             }
             System.out.println("|");
         }
         System.out.println("---------");
     }
     public void changeBoard() {
         while (true) {
             System.out.print("Enter the coordinates: ");
             n = sc.nextInt();
             m = sc.nextInt();
             if (n < 1 || n > 3 || m < 1 || m > 3) {
                 System.out.println("Coordinates should be from 1 to 3!");
             } else {
                 int x = n - 1;
                 int y = m - 1;
                 this.i = x;
                 this.j = y;
                 if (board[i][j] == '_') {
                     this.board[i][j] = 'X';
                     break;
                 } else {
                     System.out.println("This cell is occupied! Choose another one!");
                 }
 
             }
         }
        // printBoard();
     }
}

解决方法

为什么要为n,m,i,j使用字段?如果删除它,代码将更干净。

此外,您在board中更改了changeBoard,但是在board[i][j] = state.charAt(nextChar++);行中则删除了更改。您可以将其从printBoard移到构造函数。 我想写这样的东西

class TicTacToe {

    private char[][] board = new char[3][3];
    Scanner sc = new Scanner(System.in);

    public TicTacToe() {
        int nextChar = 0;
        System.out.print("Enter cells: ");
        String state = sc.nextLine();

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                board[i][j] = state.charAt(nextChar++);
            }
        }

    }

    public void printBoard() {
        System.out.println("---------");
        for (int i = 0; i < 3; i++) {
            System.out.print("| ");
            for (int j = 0; j < 3; j++) {
                System.out.print(board[i][j] + " ");
            }
            System.out.println("|");
        }
        System.out.println("---------");
    }

    public void changeBoard() {
        while (true) {
            System.out.print("Enter the coordinates: ");
            int n = sc.nextInt();
            int m = sc.nextInt();
            if (n < 1 || n > 3 || m < 1 || m > 3) {
                System.out.println("Coordinates should be from 1 to 3!");
            } else {
                int x = n - 1;
                int y = m - 1;
                if (board[x][y] == '_') {
                    this.board[x][y] = 'X';
                    break;
                } else {
                    System.out.println("This cell is occupied! Choose another one!");
                }

            }
        }
        printBoard();
    }
}