我不能让下面的代码所需的输出,对于基于控制台的井字程序.. 谁能帮助我找出错误:井字控制台程序 - Java的
import java.util.Scanner;
以下是井字游戏类:
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;
我用do-while循环用于执行break语句。虽然这是低效的,其他什么都打动了我的那一刻。
do{
int[][] turn1 = t.player1(a);
t.display(turn1);
int[][] turn2 = t.player2(turn1);
t.display(turn2);
int[][] turn3 = t.player1(turn2);
t.display(turn3);
int[][] turn4 = t.player2(turn3);
t.display(turn4);
int[][] turn5 = t.player1(turn4);
t.display(turn5);
if(t.checkwin(turn5))
break;
int[][] turn6 = t.player2(turn5);
t.display(turn6);
if(t.checkwin(turn6))
break;
int[][] turn7 = t.player1(turn6);
t.display(turn7);
if(t.checkwin(turn5))
break;
int[][] turn8 = t.player2(turn7);
t.display(turn8);
if(t.checkwin(turn5))
break;
int[][] turn9 = t.player1(turn8);
t.display(turn9);
if(t.checkwin(turn5))
break;
System.out.println("Game Draw");
count++;
}while(count ==1);
}
以下是称取2D阵列的checkwin()方法,并返回其用于破坏或继续前面的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语句显示错误的情况..
if(m[0][i] == [1][i] && m[1][i] == m[2][i]){
if(m[0][i] == 1){
player1wins();
return true;
}
else if(m[0][i] == 0){
player2wins();
return true;
}
}
}
为以下if语句显示错误的情况..
if(m[0][0] == [1][1] && m[1][1] == m[2][2]){
if(m[0][0] == 1){
player1wins();
return true;
}
else if(m[0][0] == 0){
player2wins();
return true;
}
}
return false;
}
继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();
}
}
继PLAYER1()和player2()方法获取用户输入的坐标。他们需要输入矩阵作为参数,并返回一个二维矩阵..
public int[][] player1(int matrix[][]){
Scanner sc = new Scanner(System.in);
System.out.println("1st player's turn...");
System.out.print("Enter x coordinate: ");
int x = sc.nextInt();
System.out.print("Enter y coordinate: ");
int y = sc.nextInt();
matrix[x][y] = 1;
return matrix;
}
public int[][] player2(int matrix[][]){
Scanner sc = new Scanner(System.in);
System.out.println("2nd player's turn...");
System.out.print("Enter x coordinate: ");
int x = sc.nextInt();
System.out.print("Enter y coordinate: ");
int y = sc.nextInt();
matrix[x][y] = 0;
return matrix;
}
}
此外,如果任何人都可以帮我优化这个基于控制台的井字棋java代码或职位相同的任何一个环节,这将是很大的帮助..谢谢,提前..
你有什么错误?此外,你应该真的提供一个[MCVE](http://stackoverflow.com/help/mcve),而不是一堆断开连接的片段。 –
异常在线程 “主” 了java.lang.RuntimeException:不可编译的源代码 - 在tictactoe.TicTacToe.checkwin(TicTacToe.java:72)表达 \t的非法启动 \t在tictactoe.TicTacToe.main(TicTacToe.java:37 ) Java结果:1 –
那么第72行是什么行?那是你的错误所在。 – forgivenson