Java 增强的for-loop simpledtcom存在一些问题

Java 增强的for-loop simpledtcom存在一些问题,java,Java,这是《头先Java》一书中的一个修改示例。这是一种战舰游戏,其中一个3元素阵列被用作战舰。用户必须猜测这3个位置。目前,我已经将船舶位置的值硬编码为2,3,4。当用户猜到正确的位置时,将打印命中。如果没有,则打印Miss。如果用户猜到所有3个位置,则打印Kill。但我有个问题。目前,如果用户多次进入同一位置,它仍然会显示命中率。我试图通过将已命中int cell的变量的值更改为-1来解决此问题。但出于某种原因,这并没有解决它太多。请告诉我我做错了什么 public class Game {

这是《头先Java》一书中的一个修改示例。这是一种战舰游戏,其中一个3元素阵列被用作战舰。用户必须猜测这3个位置。目前,我已经将船舶位置的值硬编码为2,3,4。当用户猜到正确的位置时,将打印命中。如果没有,则打印Miss。如果用户猜到所有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);
}

    }

因为您正在为局部变量赋值-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循环,也可以使用具有添加和删除元素方法的列表。

因为您将-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循环,也可以使用具有添加和删除元素方法的列表。

当您循环到loc上时,每个位置都会得到一个int单元格。问题是该变量与数组没有任何连接,它只是一个副本。如果更改它,原始数组将不会发生任何变化。我建议在loc上循环使用传统的for;;并使用循环逻辑中的当前数组索引将正确的单元格设置为-1。

在loc上循环时,每个位置都会得到一个int单元格。问题是该变量与数组没有任何连接,它只是一个副本。如果更改它,原始数组将不会发生任何变化。我建议在loc上循环使用传统的for;;并使用循环逻辑中的当前数组索引将正确的单元格设置为-1。

您需要在正确的索引处更新数组,而不是简单地更改单元格变量的值,该变量仅在当前迭代状态下引用数组元素

您可能应该为此使用传统的for循环,因为您无法从增强的for循环中免费获得索引

for (int i = 0; i < loc.length; i++) {
   //code...

   loc[i] = -1; //instead of cell = -1; 
}

您需要在正确的索引处更新数组,而不是简单地更改单元格变量的值,该变量仅在当前迭代状态下引用数组元素

您可能应该为此使用传统的for循环,因为您无法从增强的for循环中免费获得索引

for (int i = 0; i < loc.length; i++) {
   //code...

   loc[i] = -1; //instead of cell = -1; 
}

这个程序很短很简单,你们试过调试它吗?并没有。我忘了如何调试。现在用谷歌搜索它。如果打印了命中,你必须从数组中删除该元素。我不是删除该元素,我只是将其值更改为用户不会猜到的值,在这种情况下,哪个是-1。这是一样的,对吗?你们真的很快。谢谢大家。这个程序很短很简单,你们试过调试吗?并没有。我忘了如何调试。现在用谷歌搜索它。如果打印了命中,你必须从数组中删除该元素。我不是删除该元素,我只是将其值更改为用户不会猜到的值,在这种情况下,哪个是-1。这是一样的,对吗?你们真的很快。谢谢大家,谢谢,我不知道,谢谢,我不知道,谢谢。这个修好了,谢谢。这把它修好了。