1 c# while-loop
我不明白为什么我的while循环不会在我分配bool变量(gameEnded)时停止循环true.
Board board = new Board();
bool gameEnded = false;
while (!gameEnded)
{
gameEnded = board.DrawCheck(board); //one of these three methods returns true
gameEnded = board.WinCheckO(board);
gameEnded = board.WinCheckX(board);
Render(board);
bool turnO = false;
Console.WriteLine("Player X's turn.");
//... here some code that gets executed right
}
Run Code Online (Sandbox Code Playgroud)
因此,gameEnded布尔变量应该赋值为true,因此循环中断.我检查了Check something方法返回true.修改后的版本工作正常,即打破循环.
Board board = new Board();
bool gameEnded = false;
while (!gameEnded)
{
if (board.WinCheckX(board))
{
Console.WriteLine("X player won!");
break;
}
else if (board.WinCheckO(board))
{
Console.WriteLine("O player won!");
break;
}
else if (board.DrawCheck(board))
{
Console.WriteLine("It's a tie!");
break;
}
Render(board);
bool turnO = false;
Console.WriteLine("Player X's turn.");
//... here some code that gets executed right
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
Run Code Online (Sandbox Code Playgroud)//one of these three methods returns true
因为有三个赋值,所以这些方法中的一个返回是不够的true:只有最后一个赋值才有效,所以除非board.WinCheckX(board)返回true,否则循环继续.
修复很简单:将三个赋值与||运算符组合在一起:
gameEnded = board.DrawCheck(board)
|| board.WinCheckO(board)
|| board.WinCheckX(board);
Run Code Online (Sandbox Code Playgroud)
这种方法的另一个好处是,只要其中一种方法返回true,就不会因||操作员的短路而产生额外的呼叫.