Do-While 循环过早退出
Do-While loop is exiting prematurely
我尝试编写一个 PvP 国际象棋程序。然而,当下了一个无效的动作时,它结束了回合。
do
{
boolean q = askMove(board, white , in);
if (q == true){
white.move = false;
break;
}
else
continue;
} while (white.move == true);
do
{
//boardDisplay (board);
boolean w = askMove(board, black, in);
if (w == true){
black.move = false;
break;
}
else
continue;
}while (black.move == true);
}
在代码中,如果一块的初始坐标和最终坐标不相同,则 q 为真。
if (x1 != x2 || y1 != y2)
return true;
return false;
当我执行这段代码时,
所以,如果我下的第 2 步无效,则第 2 步应该重走,因为 (q == false)
然而,
代码应该只在轮到错误的玩家时触发“你不能移动敌人的棋子”。但是,当我也尝试下一个有效的动作时它会触发。
It says that I'm using an enemy piece!
尽管我写了:
player p
if (board[x1][y1].initPiece.name.charAt(0) != p.colour)
System.out.println ("you cannot move an enemy piece");
感谢帮助。
尽管可以改进,但我认为您的错误不在您显示的第一段代码中。
如果确实需要,askMove()
可以将white/black.move
设置为false
。那么你可以将第一段代码简化为:
while(!askMove(board, white, in));
while(!askMove(board, black, in));
这并不能解释您的错误。
但是,我认为如果您更改此代码,您会很快发现错误:
if (board[x1][y1].initPiece.name.charAt(0) != p.colour)
System.out.println ("you cannot move an enemy piece");
到此代码:
if (board[x1][y1].initPiece.name.charAt(0) != p.colour)
System.out.println ("You cannot move the enemy piece "
+ board[x1][y1].initPiece.name + " at "
+ x1 + "," + y1 + " when playing as "
+ p.colour);
我必须查看您的其余代码,但如果随着玩家切换索引被反转,我不会感到惊讶。
我尝试编写一个 PvP 国际象棋程序。然而,当下了一个无效的动作时,它结束了回合。
do
{
boolean q = askMove(board, white , in);
if (q == true){
white.move = false;
break;
}
else
continue;
} while (white.move == true);
do
{
//boardDisplay (board);
boolean w = askMove(board, black, in);
if (w == true){
black.move = false;
break;
}
else
continue;
}while (black.move == true);
}
在代码中,如果一块的初始坐标和最终坐标不相同,则 q 为真。
if (x1 != x2 || y1 != y2)
return true;
return false;
当我执行这段代码时,
所以,如果我下的第 2 步无效,则第 2 步应该重走,因为 (q == false) 然而,
代码应该只在轮到错误的玩家时触发“你不能移动敌人的棋子”。但是,当我也尝试下一个有效的动作时它会触发。
It says that I'm using an enemy piece!
尽管我写了:
player p
if (board[x1][y1].initPiece.name.charAt(0) != p.colour)
System.out.println ("you cannot move an enemy piece");
感谢帮助。
尽管可以改进,但我认为您的错误不在您显示的第一段代码中。
如果确实需要,askMove()
可以将white/black.move
设置为false
。那么你可以将第一段代码简化为:
while(!askMove(board, white, in));
while(!askMove(board, black, in));
这并不能解释您的错误。
但是,我认为如果您更改此代码,您会很快发现错误:
if (board[x1][y1].initPiece.name.charAt(0) != p.colour)
System.out.println ("you cannot move an enemy piece");
到此代码:
if (board[x1][y1].initPiece.name.charAt(0) != p.colour)
System.out.println ("You cannot move the enemy piece "
+ board[x1][y1].initPiece.name + " at "
+ x1 + "," + y1 + " when playing as "
+ p.colour);
我必须查看您的其余代码,但如果随着玩家切换索引被反转,我不会感到惊讶。