Do While 循环卡住
Do While loop gets stuck
该代码是一个井字游戏(进行中)。当我 运行 代码询问 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);
}
}
问题可能出在这条线上:
}while(Xturn = true);
这不是比较。 =
运算符是 赋值 。这会将值 true
赋值给 Xturn
,然后继续循环,因为赋值的结果始终是赋值的值。
为了比较,您可以使用 ==
。但是由于 Xturn
是一个布尔值开头,你可以简单地写:
}while(Xturn);
改变
}while(Xturn = true);
...
}while (Oturn = true);
至
}while(Xturn);
...
}while (Oturn);
Xturn = true
是一项赋值,不会检查 Xturn
是否为真。为此,您必须使用 Xturn == true
或简单的 Xturn
。 Oturn
.
也是如此
此外,如 TAsk 所述,您需要 IfGameOver
的值在循环内变为真,以便代码退出外部 do while
循环。
您有多个问题。如前所述,您没有在 while 语句中使用相等性检查,但其他问题覆盖了这个问题。您在 X 轮之后但在轮到 O 的 do-while 循环之前将 Oturn 设置为真。因此,您将在 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);
}
}
该代码是一个井字游戏(进行中)。当我 运行 代码询问 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);
}
}
问题可能出在这条线上:
}while(Xturn = true);
这不是比较。 =
运算符是 赋值 。这会将值 true
赋值给 Xturn
,然后继续循环,因为赋值的结果始终是赋值的值。
为了比较,您可以使用 ==
。但是由于 Xturn
是一个布尔值开头,你可以简单地写:
}while(Xturn);
改变
}while(Xturn = true);
...
}while (Oturn = true);
至
}while(Xturn);
...
}while (Oturn);
Xturn = true
是一项赋值,不会检查 Xturn
是否为真。为此,您必须使用 Xturn == true
或简单的 Xturn
。 Oturn
.
此外,如 TAsk 所述,您需要 IfGameOver
的值在循环内变为真,以便代码退出外部 do while
循环。
您有多个问题。如前所述,您没有在 while 语句中使用相等性检查,但其他问题覆盖了这个问题。您在 X 轮之后但在轮到 O 的 do-while 循环之前将 Oturn 设置为真。因此,您将在 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);
}
}