【发布时间】:2014-10-22 05:29:35
【问题描述】:
下面的代码块应该检查用户输入的坐标是否是船的坐标。这艘船位于 (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;
}
如果您需要查看代码的任何其他部分以便更好地帮助我,请告诉我。
【问题讨论】:
-
使用 while (frigateIsAlive) 而不是 while (frigateIsAlive == true)
-
我相信有别的东西让它进入 numOfHitsOnFrigate 你能打印出
numOfHitsonFrigate的值以确保它正确递增 -
逻辑有缺陷,这里不需要
while,假设userGuess对board[1][1]有好处,如果你进入循环,你只在循环2次后离开它首先if,我很确定这不是你想要的。 -
@KRUKUSA 我刚刚这样做了.. 它正在正确递增。
-
另外,如果你错过了,你会让自己陷入无限循环..
标签: java