Java Tic Tac Toe游戏:如何让enum打印空白

Java Tic Tac Toe游戏:如何让enum打印空白,java,enums,Java,Enums,我的课堂作业之一是使用讲师提供的外壳,制作井字游戏。我不允许更改任何函数签名或删除讲师的任何代码。我们还没有学会如何使用数组,因此本作业不使用它们。每转一圈后,如果有记号笔,纸板就会打印出来。如果是空的,它应该有一个空的空间。但是,每当我打印它时,就会打印空标记。我道歉,因为我的代码非常混乱,我在我的第一次编程课 应该是这样的 X | | O 而是像印刷品一样 X |空| O 如果有任何答案,我将不胜感激。这是作业的最后一部分,我搞不懂。谢谢你的帮助 import java.util.Scann

我的课堂作业之一是使用讲师提供的外壳,制作井字游戏。我不允许更改任何函数签名或删除讲师的任何代码。我们还没有学会如何使用数组,因此本作业不使用它们。每转一圈后,如果有记号笔,纸板就会打印出来。如果是空的,它应该有一个空的空间。但是,每当我打印它时,就会打印空标记。我道歉,因为我的代码非常混乱,我在我的第一次编程课

应该是这样的

X | | O

而是像印刷品一样

X |空| O

如果有任何答案,我将不胜感激。这是作业的最后一部分,我搞不懂。谢谢你的帮助

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来说还是很新的。是的,我建议你创建一个接受标记并返回相应字符串的方法。您将显示此方法的结果,而不是显示标记。好的,最终找到它。我创建了一个接受标记并返回字符串的方法。然后调用每个位置的方法,并打印这些位置中的内容。非常感谢你。现在看起来很简单,我已经完成了。