Tic Tac Toe控制台程序-Java

Tic Tac Toe控制台程序-Java,java,if-statement,multidimensional-array,tic-tac-toe,Java,If Statement,Multidimensional Array,Tic Tac Toe,对于基于控制台的Tic-Tac-Toe程序,我无法在以下代码中获得所需的输出。。 有人能帮我识别错误吗: import java.util.Scanner; 以下是Tictatcoe课程: public class TicTacToe { TicTacToe(){ System.out.println("---------------------"); System.out.println(" Tic Tac Toe "); System.out.prin

对于基于控制台的Tic-Tac-Toe程序,我无法在以下代码中获得所需的输出。。 有人能帮我识别错误吗:

import java.util.Scanner;
以下是Tictatcoe课程:

public class TicTacToe {
TicTacToe(){
    System.out.println("---------------------");
    System.out.println("    Tic Tac Toe     ");
    System.out.println("---------------------");
    System.out.println();
}
public static void main(String[] args) {
TicTacToe t = new TicTacToe();    

    Scanner sc = new Scanner(System.in);
    int a[][] = new int [3][3];

    for(int i=0; i<3; i++){
        for(int j=0; j<3; j++){
            a[i][j] = 2;
            System.out.print(" "+a[i][j]+" ");
        }
        System.out.println();
    }
    int count = 0;
下面是checkwin()方法,该方法接受2D数组并返回用于中断或继续上一个do while循环的布尔值

public boolean checkwin(int m[][]){
   for(int i=0; i<3; i++){
       if(m[i][0] == m[i][1] && m[i][1] == m[i][2]){
            if(m[i][0] == 1){
               player1wins();
               return true;
            }
            else if(m[i][0] == 0){
                player2wins();
                return true;
            }
       }
以下if语句的条件显示错误。

在player1wins()之后,如果player2wins()方法中的任何一个获胜,则会显示它们

public static void player1wins(){
    System.out.println("1st player wins");
}

public static void player2wins(){
    System.out.println("2nd player wins");
}
以下显示方法在每次旋转后打印矩阵

public void display(int matrix[][]){
    for(int i=0; i<3; i++){
        for(int j=0; j<3; j++){
            System.out.print(" "+matrix[i][j]+" ");
        }
        System.out.println();
    }
}    
此外,如果有人能帮助我优化这个基于控制台的tic-tac-toe java代码,或者发布任何链接,这将是非常有帮助的。。提前谢谢

if(m[0][0] == [1][1]...
应该是:

if(m[0][0] == m[1][1]...

您的if语句在语法上似乎不正确:

if(m[0][i] == [1][i] && m[1][i] == m[2][i]){ 这同样适用于其他if语句:

改变

if(m[0][0] == [1][1] && m[1][1] == m[2][2]){ 它们都在checkwin()方法中


编辑:另一个错误:你的代码在每个回合检查棋盘的第5回合。(对于第7、8和9弯,情况就是这样。第6弯可以)

另外,您可以使用
return
而不是
break
来代替do循环

但我建议完全消除该位的重复:将其更改为此,使用for和3d阵列

int[][][] turns = new int[10][][];
turns[0] = a;

// We start at 1 rather than 0 because the first value is a.
for (int i = 1; i <= 9; i++) {
    if (i % 2 == 1) { // Odd-numbered turn
        turns[i] = t.player1(turns[i - 1]);
    } else { // Even-numbered turn
        turns[i] = t.player2(turns[i - 1]);
    }

    t.display(turns[i]);

    if (t.checkwin(turns[i])) {
        return;
    }
}

System.out.println("Game Draw");
int[]turns=newint[10][];
圈数[0]=a;
//我们从1而不是0开始,因为第一个值是a。

对于(int i=1;i)您会遇到什么错误?另外,您应该在线程“main”java.lang.RuntimeException中提供一个而不是一堆断开连接的代码段。异常:不可编译的源代码-在tictactoe.tictactoe.checkwin(tictactoe.java:72)的tictactoe.tictactoe.main(tictactoe.java:37)处非法启动表达式Java结果:1那么第72行是哪一行?这就是你的错误所在。我如何优化这段代码?有人能给我发送一个链接或任何相同的算法吗???@JainamJhaveri我编辑了do-Enhanced stuff.typo…:)我花了一个小时才弄清楚,但我还是找不到。。谢谢@Kevin Workman
if(m[0][0] == m[1][1]...
if(m[0][i] == [1][i] && m[1][i] == m[2][i]){
if(m[0][i] == m[1][i] && m[1][i] == m[2][i]){
if(m[0][0] == [1][1] && m[1][1] == m[2][2]){
if(m[0][0] == m[1][1] && m[1][1] == m[2][2]){ 
int[][][] turns = new int[10][][];
turns[0] = a;

// We start at 1 rather than 0 because the first value is a.
for (int i = 1; i <= 9; i++) {
    if (i % 2 == 1) { // Odd-numbered turn
        turns[i] = t.player1(turns[i - 1]);
    } else { // Even-numbered turn
        turns[i] = t.player2(turns[i - 1]);
    }

    t.display(turns[i]);

    if (t.checkwin(turns[i])) {
        return;
    }
}

System.out.println("Game Draw");