Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Do While循环过早退出_Java_Loops_Do While_Chess - Fatal编程技术网

Java Do While循环过早退出

Java Do While循环过早退出,java,loops,do-while,chess,Java,Loops,Do While,Chess,我试着写一个PvP国际象棋程序。然而,当一个无效的移动被播放时,它结束回合 do { boolean q = askMove(board, white , in); if (q == true){ white.move = false; break; } else conti

我试着写一个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;
当我执行这个代码时

因此,如果我玩第二个无效,第二个移动应该重放,因为(q==false) 但是,

只有当轮到错误的玩家时,代码才会触发“你不能移动敌人的棋子”。但是,当我尝试使用有效的移动时,它也会触发

尽管我写道:

   player p
    if (board[x1][y1].initPiece.name.charAt(0) != p.colour)
        System.out.println ("you cannot move an enemy piece");

非常感谢您的帮助。

尽管可以改进,但我认为您的错误不在您显示的第一个代码块中

如果确实需要,可以将
askMove()
设置为白色/黑色。将
移动到
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);
根据本守则:

    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);

我必须看到您的代码的其余部分,但如果在切换玩家时索引被反转,我不会感到惊讶

请格式化您的代码。您认为
break正在做什么?