Java Tic Tac Toe游戏每次都是平局
我想代码应该很清楚。我是一个初学者程序员,我觉得一切都很好。在这种情况下,当一切看起来都很完美,但程序没有按计划运行时,您应该怎么做 简言之,我正在征求outlook对编码项目的建议&这是一个解决方案,可以解释为什么我花了45分钟的时间在这个方法上什么都没做Java Tic Tac Toe游戏每次都是平局,java,Java,我想代码应该很清楚。我是一个初学者程序员,我觉得一切都很好。在这种情况下,当一切看起来都很完美,但程序没有按计划运行时,您应该怎么做 简言之,我正在征求outlook对编码项目的建议&这是一个解决方案,可以解释为什么我花了45分钟的时间在这个方法上什么都没做 import java.util.Scanner; public class TicTacToe { public static boolean elementsAreAllEqual(char[] arr) {
import java.util.Scanner;
public class TicTacToe {
public static boolean elementsAreAllEqual(char[] arr) {
for(int i = 0; i < arr.length; i++) {
if(arr[i] != arr[i + 1]) {
return false;
}
}
return true;
}
public static boolean some1HasWon(char[][] g) {
char[] treE = new char[3];
// horizontal straight lines (rows of 3 alike)
for(int r = 0; r < g.length; r++) {
for(int c = 0; c < g.length; c++) {
treE[c] = g[r][c];
}
if(elementsAreAllEqual(treE)) {
return true;
}
treE = new char[3];
}
// vertical straight lines (columns of 3 alike)
for(int c = 0; c < g.length; c++) {
for(int r = 0; r < g.length; r++) {
treE[r] = g[c][r];
}
if(elementsAreAllEqual(treE)) {
return true;
}
treE = new char[3];
}
// upward diagonal
for(int i = 0; i < g.length; i++) {
treE[i] = g[g.length-i-1][i];
}
if(elementsAreAllEqual(treE)) {
return true;
}
treE = new char[3];
// downward diagonal
for(int i = 0; i < g.length; i++) {
treE[i] = g[i][i];
}
if(elementsAreAllEqual(treE)) {
return true;
}
return false;
}
public static void main(String args[]) {
char[][] grid = new char[3][3];
Scanner s = new Scanner(System.in);
System.out.println("Tic-Tac-Toe\n");
int goCount = 0;
char player;
boolean draw = true;
boolean end = false;
do {
if(goCount % 2 == 0) {
player = 'X';
System.out.print("'" + player + "', choose your location (row, column): ");
}
else {
player = 'O';
System.out.print("'" + player + "', choose your location (row, column): ");
}
String position = s.nextLine();
String[] p = position.split(" ");
int[] pos = {Integer.parseInt(p[0]), Integer.parseInt(p[1])};
grid[pos[0]][pos[1]] = player;
System.out.println();
for(int y = 0; y < 3; y++) {
System.out.print("\t");
for(int x = 0; x < 3; x++) {
if(grid[y][x] != ' ') {
System.out.print(grid[y][x] + " ");
}
else {
System.out.print(" ");
}
}
System.out.println();
}
System.out.println();
if(goCount > 4) {
if(some1HasWon(grid)) {
end = true;
}
else if(goCount >= 8) {
draw = true;
end = true;
}
}
goCount++;
}
while(end != true);
if(draw) {
System.out.println("The game was a draw.");
}
else if(goCount % 2 == 0) {
System.out.println("Player 'X' wins the game.");
}
else {
System.out.println("Player 'O' wins the game.");
}
}
}
import java.util.Scanner;
公共类Tictatcoe{
公共静态布尔元素sareallequal(char[]arr){
对于(int i=0;i4){
如果(有人赢了(电网)){
结束=真;
}
否则如果(goCount>=8){
绘制=真;
结束=真;
}
}
goCount++;
}
while(end!=true);
如果(抽签){
System.out.println(“这场比赛是平局。”);
}
否则如果(goCount%2==0){
System.out.println(“玩家“X”赢得游戏。”);
}
否则{
System.out.println(“玩家‘O’赢得游戏。”);
}
}
}
当i=arr.length-1
时,您的方法elementaAreAllEqual
访问数组外的元素,您应该只迭代到arr.length-1
public static boolean elementsAreAllEqual(char[] arr) {
for(int i = 0; i < arr.length - 1; i++) {
if(arr[i] != arr[i + 1]) {
return false;
}
}
return true;
}
您可以使用调试工具一步一步地检查代码。
if(goCount > 4) {
if(some1HasWon(grid)) {
end = true;
draw = false;
} else if(goCount >= 8) {
draw = true;
end = true;
}
}