我正在阅读《 Head First Java》一书,在第5章中通过战舰游戏(简单版)遇到了这个问题。我知道这本书的代码不起作用,我尝试对其进行自我修复,但是仍然没有用。
所以尝试用谷歌搜索它,我在这个网站上找到了一些帖子,但是我仍然有问题。游戏无法正常运行。
如果玩家输入任何随机数,则输出始终为“命中” ...
这是代码的最新版本:
DotCom类:
public class DotCom {
private ArrayList<String> locationCells = new ArrayList<>();
public void setlocationCells(int[] loc) {
if (loc != null)
for (int val : loc)
locationCells.add(String.valueOf(val));
}
public String checkYourself(String userInput) {
String result = "miss";
int index = locationCells.indexOf(userInput);
if (index >= 0) {
locationCells.remove(index);
}
if (locationCells.isEmpty()) {
result = "kill";
} else {
result = "hit";
}
System.out.println(result);
return result;
}
}
DotComGame类:
public class DotComGame {
public static void main(String[] args) {
int guessingTimes = 0;
DotCom dot = new DotCom();
GameHelperrr helper = new GameHelperrr();
int randomNum = (int) (Math.random() * 5);
int[] locations = { randomNum, randomNum + 1, randomNum + 2 };
dot.setlocationCells(locations);
boolean isAlive = true;
while (isAlive == true) {
String guess = helper.getUserInput("Enter a number");
String result = dot.checkYourself(guess);
guessingTimes++;
if (result.equals("kill")) {
isAlive = false;
System.out.println("You took " + guessingTimes + " guesses");
}
}
}
}
希望能得到详细且易于理解的答案,因为我陷入了困境,而且我已经几天不能继续着这本书了。
最佳答案
int index = locationCells.indexOf(userInput);
如果元素在集合中不存在,则此方法将返回-1
。
因此,如果您错过了,它将不会达到以下条件:
if (index >= 0) {
locationCells.remove(index);
}
该集合中仍然有一些元素,因为您没有删除任何内容...
if (locationCells.isEmpty()) {
result = "kill";
} else {
result = "hit";
}
因此,如果错过了,结果仍然显示为“命中”。
尝试以下方法:
if (locationCells.isEmpty()) {
result = "kill";
} else {
result = index == -1 ? "miss" : "hit";
}
如果您没有杀死对手的战舰,那么您要么错过所有战舰,要么击中一艘战舰。