Java 内翻,而循环。暂停节目
所以,我正在为编程1做一个大项目。我不知道如何使用网站上提供的任何其他方法停止无限while循环。以下是所有涉及玩家移动的方法: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
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这些方法做什么?