这是Head First Java一书中的一个修改过的例子。它是一种战舰游戏,其中3元素阵列被用作战舰。用户必须猜测这3个位置。目前,我已将船舶位置的值硬编码为2,3,4。当用户猜到正确的位置" Hit"打印出来。如果不是那么"小姐"打印出来。如果用户猜到所有3个位置,那么" Kill"打印出来。但我有一个问题。目前,如果用户多次进入同一位置,它仍然会受到影响。我试图通过将已被命中的变量(int cell)的值更改为" -1"来解决此问题。但由于某些原因,这也没有解决它。请告诉我我做错了什么。
public class Game {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] location = {2,3,4};
SimpleDotCom firstGame = new SimpleDotCom();
firstGame.setLocation(location);
firstGame.checkYourself("2");
firstGame.checkYourself("2");
//firstGame.checkYourself("2");
}
}
public class SimpleDotCom {
int [] loc = null;
int numOfHits = 0;
void setLocation (int [] cellLocation){
loc = cellLocation;
}
void checkYourself(String userGuess){
int guess = Integer.parseInt(userGuess);
String result = "Miss";
for(int cell:loc){
if (guess == cell){
result = "Hit";
numOfHits++;
cell = -1;
break;
}
if (numOfHits==loc.length){
result = "Kill";
}
}
System.out.print("Result: " + result);
System.out.println(" ** Num of Hits: " + numOfHits);
}
}
答案 0 :(得分:3)
当您循环loc
时,每个位置都会获得int cell
。问题是该变量与阵列没有任何连接,它只是一个副本。如果你改变它,原始阵列就不会发生任何事情。我建议使用传统的loc
循环for(;;)
并使用循环逻辑中的当前数组索引来设置正确的"单元格"到-1。
答案 1 :(得分:1)
因为您将-1分配给局部变量。实际上没有在数组中更新
for(int cell:loc){ // cell is local copy of element in array is you have array of primitive int
if (guess == cell){
result = "Hit";
numOfHits++;
cell = -1;
break;
}
if (numOfHits==loc.length){
result = "Kill";
}
}
您可以使用传统的for循环或使用List
,其中包含添加删除元素的方法。
答案 2 :(得分:0)
您需要在正确的索引处更新数组,而不是简单地更改cell
变量的值,该变量仅引用当前迭代状态下的数组元素。
你可能应该使用传统for循环,因为你无法从增强的for循环中获得免费的索引。
for (int i = 0; i < loc.length; i++) {
//code...
loc[i] = -1; //instead of cell = -1;
}