有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Do While循环被卡住

代码是一个Tic-Tac-Toe游戏(正在进行中)。当我运行代码时,它询问X的位置号,然后停止。它与while循环有关,因为当我在没有它的情况下运行它时,它工作得很好。然而,我需要循环将X设置为false,这样它就变成了O

import java.util.Scanner;
class TicTacToe


{
public static void main(String[] args)

{
    Scanner scan = new Scanner(System.in);
    int XInput, OInput;
    boolean IfGameOver;
    String []board = {"1","2","3","4","5","6","7","8","9"};
    IfGameOver = false;
    boolean Xturn, Oturn;
    Xturn = true;
    Oturn = false;

    System.out.print("Welcome to Tic-Tac-Toe!\n\n");
do
    {

        {
         System.out.println(" " + board[0] + board[1] + board[2]);
         System.out.println(" " + board[3] + board[4] + board[5]);
         System.out.println(" " + board[6] + board[7] + board[8]);
        }
             if (Xturn)
             System.out.println("It is X's turn, position number?");
             if (Oturn)
             System.out.println("It is O's turn, position number?");

            do
                {
                try
                {
                XInput = scan.nextInt();
                board[XInput-1] = "X";
                Oturn= true;
                Xturn = false;
                }
                catch (NumberFormatException e)
                {
                    System.out.println("Invalid input. Please enter a position number");
                    XInput = scan.nextInt();
                }
                }while(Xturn = true);
            do
                {
                try
                {
                OInput = scan.nextInt();
                board[OInput-1] = "X";
                Oturn = false;
                Xturn = true;
                }
                catch (NumberFormatException e)
                {
                    System.out.println("Invalid input. Please enter a position number");
                    OInput = scan.nextInt();
                }
                }while (Oturn = true);

    } while (!IfGameOver);
}
}

共 (3) 个答案

  1. # 1 楼答案

    问题可能出在这一行:

                }while(Xturn = true);
    

    这不是一个比较。=运算符是赋值。这会将值true分配给Xturn,然后继续循环,因为分配的结果始终是分配的值

    为了进行比较,可以使用==。但由于Xturn是一个布尔值,您可以简单地编写:

                }while(Xturn);
    
  2. # 2 楼答案

    改变

    }while(Xturn = true);
    ...
    }while (Oturn = true);
    

    }while(Xturn);
    ...
    }while (Oturn);
    

    Xturn = true是一个赋值,不会检查Xturn是否为真。为此,必须使用Xturn == true或简单Xturn。这同样适用于Oturn

    另外,如TAsk所述,您需要IfGameOver的值在循环内变为true,以便代码退出外部do while循环

  3. # 3 楼答案

    你有很多问题。如前所述,您的while语句中没有使用相等检查,但其他问题会覆盖此问题。在X的回合之后,但在O的回合的do-while循环之前,您正在将Oturn设置为true。因此,您将在X输入之后立即进入Oturn do循环。这应该会把它清理干净

    import java.util.Scanner;
    class TicTacToe
    
    {
    public static void main(String[] args)
    
    {
        Scanner scan = new Scanner(System.in);
        int Input;
        boolean IfGameOver;
        String []board = {"1","2","3","4","5","6","7","8","9"};
        IfGameOver = false;
        boolean Xturn = true;
    
        System.out.print("Welcome to Tic-Tac-Toe!\n\n");
    do
        {
    
            {
             System.out.println(" " + board[0] + board[1] + board[2]);
             System.out.println(" " + board[3] + board[4] + board[5]);
             System.out.println(" " + board[6] + board[7] + board[8]);
            }
                 if (Xturn)
                 System.out.println("It is X's turn, position number?");
                 else
                 System.out.println("It is O's turn, position number?");
    
                 Input = -1;
                do
                    {
                    try
                    {
                    Input = scan.nextInt();
                    board[Input-1] = (Xturn?"X":"O");
                    Xturn = !Xturn;
                    }
                    catch (Exception e)
                    {
                        System.out.println("Invalid input. Please enter a valid position number");
                    }
                    }while(Input==-1);
        } while (!IfGameOver);
    }
    }