Java Tic Tac Toe游戏:如何让enum打印空白
我的课堂作业之一是使用讲师提供的外壳,制作井字游戏。我不允许更改任何函数签名或删除讲师的任何代码。我们还没有学会如何使用数组,因此本作业不使用它们。每转一圈后,如果有记号笔,纸板就会打印出来。如果是空的,它应该有一个空的空间。但是,每当我打印它时,就会打印空标记。我道歉,因为我的代码非常混乱,我在我的第一次编程课 应该是这样的 X | | O 而是像印刷品一样 X |空| O 如果有任何答案,我将不胜感激。这是作业的最后一部分,我搞不懂。谢谢你的帮助Java Tic Tac Toe游戏:如何让enum打印空白,java,enums,Java,Enums,我的课堂作业之一是使用讲师提供的外壳,制作井字游戏。我不允许更改任何函数签名或删除讲师的任何代码。我们还没有学会如何使用数组,因此本作业不使用它们。每转一圈后,如果有记号笔,纸板就会打印出来。如果是空的,它应该有一个空的空间。但是,每当我打印它时,就会打印空标记。我道歉,因为我的代码非常混乱,我在我的第一次编程课 应该是这样的 X | | O 而是像印刷品一样 X |空| O 如果有任何答案,我将不胜感激。这是作业的最后一部分,我搞不懂。谢谢你的帮助 import java.util.Scann
import java.util.Scanner;
public class TicTacToe
{
public enum Marker
{
EMPTY,
X,
O
};
private static Marker position1 = Marker.EMPTY;
private static Marker position2 = Marker.EMPTY;
private static Marker position3 = Marker.EMPTY;
private static Marker position4 = Marker.EMPTY;
private static Marker position5 = Marker.EMPTY;
private static Marker position6 = Marker.EMPTY;
private static Marker position7 = Marker.EMPTY;
private static Marker position8 = Marker.EMPTY;
private static Marker position9 = Marker.EMPTY;
private static Marker turn = Marker.X;
public static void main(String[]args)
{
Scanner scan = new Scanner(System.in);
printExampleboard();
for (int x = 0;x<10;x++)
{
if (hasWon(Marker.X) == true)
{
System.out.println("Player X has won!");
System.exit(0);
}
if (hasWon(Marker.O) == true)
{
System.out.println("Player O has won!");
System.exit(0);
}
boolean tie = isTie();
if (tie == true)
{
System.out.println("This game is a tie!");
}
else
{
if (x%2 == 1)
{
boolean oinput = true;
System.out.println("Player O, please enter a position to play");
while (oinput == true)
{
turn = Marker.O;
int pos = scan.nextInt();
if (isValidMove(pos) == true)
{
markTheBoard(turn, pos);
printBoard();
oinput = false;
}
else
{
System.out.println("Position " + pos + " is already occupied or an invalid , please pick another position.");
}
}
}
else
{
boolean input = true;
System.out.println("Player X, please enter a position to play");
while (input == true)
{
turn = Marker.X;
int pos = scan.nextInt();
if (isValidMove(pos) == true)
{
markTheBoard(turn, pos);
printBoard();
input = false;
}
else
{
System.out.println("Position " + pos + " is already occupied or an invalid , please pick another position.");
}
}
}
}
}
}
/**
* This function returns true if the spot is empty, false if not. boolean
*/
public static boolean isValidMove(int pos)
{
if (pos>0 && pos <10)
{
Marker m = Marker.EMPTY;
switch(pos)
{
case 1:
{
m = position1;
break;
}
case 2:
{
m = position2;
break;
}
case 3:
{
m = position3;
break;
}
case 4:
{
m = position4;
break;
}
case 5:
{
m = position5;
break;
}
case 6:
{
m = position6;
break;
}
case 7:
{
m = position7;
}
break;
case 8:
{
m = position8;
break;
}
case 9:
{
m = position9;
break;
}
}
if (m == Marker.EMPTY)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
public static void printExampleboard()
{
System.out.println("We are about to play Tic Tac Toe, when asked to enter a position,\nplease refer to the below map:");
for (int x = 0; x < 9; x+=3)
{
System.out.println("-------------");
System.out.println("| " + (x + 1) + " | " + (x + 2) + " | "+ (x + 3) + " |");
}
System.out.println("-------------");
}
/**
* This method will print the board as shown in the above example.
*/
public static void printBoard()
{
System.out.println("-------------");
System.out.println("| " + position1 + " | " + position2 + " | " + position3 + " | ");
System.out.println("-------------");
System.out.println("| " + position4 + " | " + position5 + " | " + position6 + " | ");
System.out.println("-------------");
System.out.println("| " + position7 + " | " + position8 + " | " + position9 + " | ");
System.out.println("-------------");
}
/**
* Checks if a particular player has won.
*
* @param m The player to check
* @return true if the player won, false if not boolean
*/
public static boolean hasWon(Marker m)
{
if ((position1 == m && position2 == m && position3 == m) ||(position4 == m && position5 == m && position6 == m) ||
(position7 == m && position8 == m && position9 == m) ||(position1 == m && position4 == m && position7 == m) ||
(position2 == m && position5 == m && position8 == m) ||(position3 == m && position6 == m && position9 == m) ||
(position1 == m && position5 == m && position9 == m) ||(position3 == m && position5 == m && position7 == m))
{
return true;
}
return false;
}
/**
* Checks if the board is full with no winner
* @return true if the board is full with no winner, false otherwise boolean
*/
public static boolean isTie()
{
boolean tie = true;
Marker m = Marker.EMPTY;
if (position1 != m && position2 != m && position3 != m &&
position4 != m && position5 != m && position6 != m &&
position7 != m && position8 != m && position9 != m)
{
return tie;
}
else
{
tie = false;
return tie;
}
}
/**
* Mark the given position with the given marker
* @param m The marker of the player given
* @param pos The position that we are marking
*/
public static void markTheBoard(Marker m, int pos)
{
switch (pos)
{
case 1:
{
position1 = m;
break;
}
case 2:
{
position2 = m;
break;
}
case 3:
{
position3 = m;
break;
}
case 4:
{
position4 = m;
break;
}
case 5:
{
position5 = m;
break;
}
case 6:
{
position6 = m;
break;
}
case 7:
{
position7 = m;
break;
}
case 8:
{
position8 = m;
break;
}
case 9:
{
position9 = m;
break;
}
}
}
}如果允许,应该实现标记枚举的toString方法以返回正确的值。如果this==EMPTY,则返回X,如果this==X,则返回X,依此类推。要在枚举上实现方法,请在最后一个成员后加一个分号,然后像往常一样实现该方法:
public enum Marker
{
EMPTY, X, O;
public String toString() { /* code here */ }
};
如果不能,则可以检查每个位置的标记是否为空,如果为空,则打印一个空格,否则打印标记。因此我尝试了您的第二个选项。我的教练告诉我类似的事情,但我完全听不懂。我有if position1==Marker.EMPTY{position1=;},但是我得到了不兼容的类型错误。您不能给变量分配一个空格,因为Marker和String确实不兼容。您应该在打印标记之前进行测试,并在此基础上决定显示什么。因此,我可以在printBoard之前添加一个方法,检查位置是否为空,以及它们是否返回空格?谢谢你的帮助,对CS来说还是很新的。是的,我建议你创建一个接受标记并返回相应字符串的方法。您将显示此方法的结果,而不是显示标记。好的,最终找到它。我创建了一个接受标记并返回字符串的方法。然后调用每个位置的方法,并打印这些位置中的内容。非常感谢你。现在看起来很简单,我已经完成了。