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';
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';
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("---------");
}
没检查其他逻辑是不是有问题^_^
创建一个程序,程序提示两个玩家可以选择输入XO,当输入一个标志的坐标时,程序在控制台上重新显示棋盘,然后确定游戏的状态。
这是原题,求救高手噶,被这题困扰半天了
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("---------");
}
}
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");
}
}
}
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方法搞的特复杂,没必要。如果非要那么复杂就看8楼解答。
isEqual()方法判断是否相等,你只是关心了X或者O是否相等,但是没有排除char未赋值默认的0
其余的都是0自然会返回true