import java.util.Scanner;
public class TicTacToe {
public static void main(String[] args){
Scanner Input = new Scanner(System.in);

char[][] player = new char [3][3];

Print(player);

for(int i=1;i<10;i++){
if(i%2 != 0){
System.out.print("Enter a row (1,2 or 3)for player x:");
int row = Input.nextInt();
System.out.print("Enter a column (1,2 or 3)for player x:");
int column = Input.nextInt();

player[row-1][column-1]='x';

Print(player);

if(isWon(player)){
System.out.println("x player won");
break;
}
}

else{
System.out.print("Enter a row (1,2 or 3)for player o:");
int row = Input.nextInt();
System.out.print("Enter a column (1,2 or 3)for player o:");
int column = Input.nextInt();

player[row-1][column-1]='o';

Print(player);

if(isWon(player)){
System.out.println("o player won");
break;
}
}
}

if(!isWon(player))
System.out.println("no winner");
}


public static boolean isWon(char[][] m){
for(int i=0;i<3;i++)
if(isEqual(m[i]))
return true;

for(int j=0;j<3;j++){
char[] column = new char[3];
for(int i=0;i<3;i++){
column[i]=m[i][j];
}

if(isEqual(column))
return true;
}

for(int i = 0;i<2;i++){
if(i==0){
char[] column ={m[0][0],m[1][1],m[2][2]};

if(isEqual(column))
return true;
}

else{
char[] column ={m[0][1],m[1][1],m[2][0]};

if(isEqual(column))
return true;
}
}

return false;
}

public static boolean isEqual(char[] list){
char[] temp = new char[3];

System.arraycopy(list, 0, temp, 0, 3);

for(int i=1;i<3;i++)
if(temp[i]!= temp[i-1])
return false;

return true;
}

public static void Print(char[][] n){

for(int i=1;i<8;i++){
if(i%2 != 0)
System.out.println("-------------------------"+ "\n");
else{
for(int k=1;k<8;k++){
if(k%2!=0)
System.out.print("|"+ " ");
else{
for(int m =0;m<3;m++)
System.out.print(n[(k/2)-1][m]+" ");
}

}

System.out.println("\n");

}
}
}
}到底哪里出问题我也说不出来,就是我输入一个坐标的时候,整列都自动输入同一个字母了,这是怎么回事?
是这段代码有问题吗?  player[row-1][column-1]='x';

解决方案 »

  1.   

    井字游戏是3*3总共9个格子,你看你画了几个格子?给你重写了Print方法,
    public static void Print(char[][] n) {
    System.out.println("---------");
    for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++)
    System.out.print(" " + n[i][j]);
    System.out.println();
    }
    System.out.println("---------");
    }
    没检查其他逻辑是不是有问题^_^
      

  2.   

    在井字游戏中,两个玩家使用各自的标志(一方用X另一方就用O),轮流填写3x3的网格中的某个空格。当一个玩家在网格的水平方向,垂直方向或者对角线上出现了三个相同的字母,表明游戏结束,该玩家获胜。平局是指网格中所有的空格都被填满时,没有任何一方的玩家获胜的情况。
    创建一个程序,程序提示两个玩家可以选择输入XO,当输入一个标志的坐标时,程序在控制台上重新显示棋盘,然后确定游戏的状态。
    这是原题,求救高手噶,被这题困扰半天了
      

  3.   

    你的isEqual()方法有问题:
        public static boolean isEqual(final char[] list){
            final char[] temp = new char[3];        System.arraycopy(list, 0, temp, 0, 3);        for(int i=1;i<3;i++) {
                //Need to determine whether the element is empty(is not 'x' or 'o')
                if((temp[i]!= temp[i-1] && temp[i-1] != 0) || temp[i-1] == 0) {
                    //if(temp[i] != tem[i-1] || temp[i-1] != 'x' || temp[i-1] != 'o'){
                    return false;
                }
            }
            return true;
        }
    print方法也有问题:
        public static void Print(final char[][] n) {
            System.out.println("---------");
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    System.out.print(" " + n[i][j]);
                }
                System.out.println();
            }
            System.out.println("---------");
        }
    }
      

  4.   

    你的print方法可以改成这样:
        public static void Print(final char[][] n){
            for(int i=1;i<8;i++){
                if(i%2 != 0) {
                    System.out.println("-------------------------"+ "\n");
                } else{
                    for(int k=1;k<8;k++){
                        if(k%2!=0) {
                            System.out.print("|"+ " ");
                        } else{
    //                        for(int m =0;m<3;m++) {
    //                            System.out.print(n[(k/2)-1][m]+" ");
                            System.out.print(n[(i/2)-1][(k/2)-1]+"     ");
    //                        }
                        }
                    }
                    System.out.println("\n");
                }
            }
        }
      

  5.   

    isEqual方法必须判断是否为空或者不是'x'或'o'
    public static boolean isEqual(final char[] list){
            final char[] temp = new char[3];        System.arraycopy(list, 0, temp, 0, 3);        for(int i=1;i<3;i++) {
                //Need to determine whether the element is empty(is not 'x' or 'o')
                if((temp[i]!= temp[i-1] && temp[i-1] != 0) || temp[i-1] == 0) {
                    //if(temp[i] != tem[i-1] || temp[i-1] != 'x' || temp[i-1] != 'o'){
                    return false;
                }
            }
            return true;
        }
      

  6.   

    7楼8楼正解。
    主要是你的print方法搞的特复杂,没必要。如果非要那么复杂就看8楼解答。
    isEqual()方法判断是否相等,你只是关心了X或者O是否相等,但是没有排除char未赋值默认的0
    其余的都是0自然会返回true