Java 内翻,而循环。暂停节目

Java 内翻,而循环。暂停节目,java,while-loop,logic,infinite-loop,Java,While Loop,Logic,Infinite Loop,所以,我正在为编程1做一个大项目。我不知道如何使用网站上提供的任何其他方法停止无限while循环。以下是所有涉及玩家移动的方法: public boolean movement(Move m, int moved){ int rowM, colM, row, col; Player p = m.getPlayer(); if (moved == 0 || moved == 1 || moved == 7) rowM = -1

所以,我正在为编程1做一个大项目。我不知道如何使用网站上提供的任何其他方法停止无限while循环。以下是所有涉及玩家移动的方法:

public boolean movement(Move m, int moved){
        int rowM, colM, row, col;
        Player p = m.getPlayer();
        if (moved == 0 || moved == 1 || moved == 7)
            rowM = -1;
        if (moved == 2 || moved == 6)
            rowM = 0;
        if (moved == 3 || moved == 4 || moved == 5)
            rowM = 1;
        else
            rowM = 0;
        if (moved == 5 || moved == 6 || moved == 7)
            colM = -1;
        if (moved == 0 || moved == 4)
            colM = 0;
        if (moved == 1 || moved == 2 || moved == 3)
            colM = 1;
        else
            colM = 0;
        row = rowM + m.getRow();
        col = colM + m.getColumn();
        if (!onBoard(row, col) || !getPiece(row, col).opposite(p.getPiece()))
            return false;
        while ((onBoard(row,col))&&(getPiece(row,col).opposite(p.getPiece()))){
            row += rowM;
            col += colM;
        }
        if (onBoard(row, col) && getPiece(row, col).opposite(p.getPiece()))
            return true;
        return false;

    }
    private void change(Move m, int moved){
        int rowM, colM, row, col;
        Player p = m.getPlayer();
        if (moved == 0 || moved == 1 || moved == 7)
            rowM = -1;
        if (moved == 2 || moved == 6)
            rowM = 0;
        if (moved == 3 || moved == 4 || moved == 5)
            rowM = 1;
        else
            rowM = 0;
        if (moved == 5 || moved == 6 || moved == 7)
            colM = -1;
        if (moved == 0 || moved == 4)
            colM = 0;
        if (moved == 1 || moved == 2 || moved == 3)
            colM = 1;
        else
            colM = 0;
        row = rowM + m.getRow();
        col = colM + m.getColumn();
        while (getPiece(row, col).opposite(p.getPiece())){
            setPiece(p.getPiece(), row, col);
            row += rowM;
            col += colM;
        }
    }
    public void makeMove(Move move){
        Player p = move.getPlayer();
        for (int c = 0; c < 8; c++){
            if (movement(move, c))
                change(move, c);
        }
        setPiece(p.getPiece(), move.getRow(), move.getColumn());
    }
    public int handleTurn(Display display){
        Move m = display.getMove(this.current);

        if (!moveLegal(m)){
            display. displayMessage("Illegal Move!");
            return 1;
        }
        makeMove(m);
        Player p = getNextPlayer();
        if (p == current)
            display.displayMessage("Skipped! " + other.getName().toString()); 
        if (gameOver())
            return -1;
        else {
            other = current;
            current = p;
        }
        display.displayStatus(current, "Your Move!");
        return 0; 
    }
公共布尔移动(移动m,移动int){
int rowM,colM,row,col;
Player p=m.getPlayer();
如果(移动==0 | |移动==1 | |移动==7)
rowM=-1;
如果(移动==2 | |移动==6)
rowM=0;
如果(移动==3 | |移动==4 | |移动==5)
rowM=1;
其他的
rowM=0;
如果(移动==5 | |移动==6 | |移动==7)
colM=-1;
如果(移动==0 | |移动==4)
colM=0;
如果(移动==1 | |移动==2 | |移动==3)
colM=1;
其他的
colM=0;
row=rowM+m.getRow();
col=colM+m.getColumn();
如果(!board(row,col)| |!getPiece(row,col).对立面(p.getPiece())
返回false;
while((船上(行,列))和&(getPiece(行,列)。相反(p.getPiece())){
row+=rowM;
col+=colM;
}
if(船上(行,列)和&getPiece(行,列)。相反(p.getPiece())
返回true;
返回false;
}
私有无效更改(移动m,整数移动){
int rowM,colM,row,col;
Player p=m.getPlayer();
如果(移动==0 | |移动==1 | |移动==7)
rowM=-1;
如果(移动==2 | |移动==6)
rowM=0;
如果(移动==3 | |移动==4 | |移动==5)
rowM=1;
其他的
rowM=0;
如果(移动==5 | |移动==6 | |移动==7)
colM=-1;
如果(移动==0 | |移动==4)
colM=0;
如果(移动==1 | |移动==2 | |移动==3)
colM=1;
其他的
colM=0;
row=rowM+m.getRow();
col=colM+m.getColumn();
while(getPiece(row,col).反面(p.getPiece()){
设置块(p.getPiece(),行,列);
row+=rowM;
col+=colM;
}
}
公共无效makeMove(移动){
Player p=move.getPlayer();
对于(int c=0;c<8;c++){
如果(移动(移动,c))
改变(移动,c);
}
设置块(p.getPiece(),move.getRow(),move.getColumn());
}
公共int handleTurn(显示){
Move m=display.getMove(this.current);
如果(!m)){
display.displayMessage(“非法移动!”);
返回1;
}
makeMove(m);
Player p=getNextPlayer();
如果(p==当前)
display.displayMessage(“跳过!”+other.getName().toString());
if(gameOver())
返回-1;
否则{
其他=电流;
电流=p;
}
display.displayStatus(当前“您的移动!”);
返回0;
}

我需要更多的源代码才能给你一个准确的答案。不过,我相信我可以帮你做一些观察

  • 如果方法 参数
    移动
    超出范围
    0
    7
  • 在移动方法中,最终的
    if
    条件永远无法计算 到
    ,因为需要相同的条件来计算
    false
    才能退出循环
根据这些观察结果,我建议您尝试以下版本的移动方法:

public boolean movement(Move m, int moved)
{
    int rowM, colM, row, col;
    Player p = m.getPlayer();
    if (moved == 0 || moved == 1 || moved == 7)
        rowM = -1;
    else if (moved == 3 || moved == 4 || moved == 5)
        rowM = 1;
    else // moved == 2 || moved == 6
        rowM = 0;
    if (moved == 5 || moved == 6 || moved == 7)
        colM = -1;
    else if (moved == 1 || moved == 2 || moved == 3)
        colM = 1;
    else // moved == 0 || moved == 4
        colM = 0;
    row = rowM + m.getRow();
    col = colM + m.getColumn();
    return onBoard(row, col) && getPiece(row, col).opposite(p.getPiece());
}

什么无限循环在哪里?你试过调试器吗?我就是这样找到的。这是移动方法。检查板上的方法(行、列)和getPiece这些方法做什么?