下面的代码块应该检查用户输入的坐标是否是船的坐标。该船位于(1,1)和(1,2)的二维阵列上。
当我使用while循环包围getUserGuess
方法实现时,问题就开始了。循环检查船是否仍然存活,并将继续要求用户输入坐标,直到船沉没为止。但是,只要用户输入任意一对正确坐标,整艘船就会沉没。
我不知道为什么会这样。一旦我注释掉循环,问题就会停止,但循环是必要的。
以下是方法:
public void checkResult(String userGuess) {
while (frigateIsAlive == true) {
if (userGuess.equalsIgnoreCase(board[1][1])){
System.out.println("hit!");
numOfHitsOnFrigate++;
board[1][1] = " *";
createBoard();
}
if (userGuess.equalsIgnoreCase(board[1][2])) {
System.out.println("hit!");
numOfHitsOnFrigate++;
board[1][2] = " *";
createBoard();
}
else if (numOfHitsOnFrigate == 2) {
System.out.println("Enemy frigate has been sunk!");
frigateIsAlive = false;
break;
}
else {
System.out.println("miss!");
// try again
}
}
}
public String getUserGuess()
{ // takes the users guess
System.out.println("Choose a coordinate on the board to fire at");
int x = input.nextInt();
int y = input.nextInt();
String userGuess = board[x][y];
return userGuess;
}
如果您需要查看代码的其他任何部分以便更好地帮助我,请告诉我。
答案 0 :(得分:3)
这种方法存在缺陷:
如果userGuess
与主席[1] [1]匹配,则循环会让您增加numOfHitsOnFrigate
两次,然后您将frigateIsAlive
更改为false并退出。
如果userGuess
与电路板[1] [2]匹配,则循环将使您无限次增加numOfHitsOnFrigate
,并且永远不会退出。
如果userGuess
不匹配,则循环将永不终止,并在不获取新输入的情况下继续打印miss!
。
您需要删除循环,因为此方法会检查单个userGuess
,并更改条件:
public void checkResult(String userGuess) {
if (userGuess.equalsIgnoreCase(board[1][1])){
System.out.println("hit!");
numOfHitsOnFrigate++;
board[1][1] = " *";
createBoard();
} else if (userGuess.equalsIgnoreCase(board[1][2])) {
System.out.println("hit!");
numOfHitsOnFrigate++;
board[1][2] = " *";
createBoard();
} else {
System.out.println("miss!");
// try again
}
if (numOfHitsOnFrigate == 2) {
System.out.println("Enemy frigate has been sunk!");
frigateIsAlive = false;
}
}
根据你所写的内容 - I surrounded the getUserGuess method implementation with a while loop.
- 你有另一个循环,它不断从用户那里获得输入。那个你没有向我们展示过代码的其他循环是必要的,因为如果没有它,游戏将无法进展。
答案 1 :(得分:1)
你可能想要什么(伪代码):
(即你错放了while
循环)