我该如何打印出来?

时间:2012-01-02 11:38:20

标签: java

这个简单的程序要求玩家的数量,他们的名字和(在最后一个)它计算他们的分数。但我不知道为什么它不会去下一个球员。看看我的代码:

    Scanner scanner = new Scanner(System.in);
    HashMap<String,Integer> players= new HashMap<String,Integer>();

    System.out.printf("Give the number of the players: ");
    int numOfPlayers = scanner.nextInt();

    for(int k=1;k<=numOfPlayers;k++)
    {
        System.out.printf("Give the name of player %d: ",k);
        String nameOfPlayer= scanner.next();
        players.put(nameOfPlayer,0);//score=0
    }

    //This for finally returns the score 
    for(String name:players.keySet())
    { 
      int k=1;
      do{ 
          System.out.println("Name of player in this round: "+name);
           System.out.printf("Give me your word: ");
           String nameOfWord= scanner.next();

          //::::::::::::::::::::::
          //::::::::::::::::::::::

          int score=players.get(name)+10;
          //This will update the corresponding entry in HashMap
          players.put(name,score);
          System.out.println("The Player "+name+" has "+players.get(name)+" points ");
    }while(k>0);
}
}  }

返回:

 Give the number of the players: 2
 Give the name of player 1: A
 Give the name of player 2: B
 Name of player in this round: A
 Give me your word: ABC
 The Player A has 10 points 
 Name of player in this round: A
 Give me your word:......
........

但我希望在计算'A'的分数后计算'B'的分数。我怎么能这样做?我做错了什么?

3 个答案:

答案 0 :(得分:1)

摆脱do while - 你不需要它。另外,在Map上“正确”迭代 这是重新编写的代码片段:

// Note this more elegant iteration over a map
for (Map.Entry<String, Integer> entry : players.entrySet()) {
    String name = entry.getKey();
    int score = entry.getValue();
    System.out.println("Name of player in this round: " + name);
    System.out.printf("Give me your word: ");
    String nameOfWord = scanner.next();
    // Some code that uses "nameOfWord"
    score += 10;
    entry.setValue(score); // Note this more elegant use of the API
    System.out.println("The Player " + name + " has " + score + " points");
}

我必须承认我不明白你要做的是什么,但至少这段代码符合你的代码意图。

答案 1 :(得分:0)

您不会在k循环中的任何位置更改变量do ... while(这是循环条件中包含的唯一变量) - 这意味着它将永远与第一个玩家循环!

如果我正确地解释您要执行的操作,则应该完全删除do {} while (k>0)行 - 您甚至不会在任何地方引用k的值循环,除了条件;它可能是以另一种方式迭代玩家的剩余部分吗?

或者,如果它应该是进行游戏回合的循环(一轮是每个玩家一回合的回合),那么它处于错误的位置 - 它应该在for ...循环周围迭代玩家,而不是玩家;你当然也必须为游戏提供一个合适的条件 - 如果它真的取决于你当前使用的k变量,那么这个变量也必须改变somwhere,或者你回到了一个无休止的循环!

但如果没有更多信息,很难解释您的代码;请更新您的问题,了解更多信息,了解游戏中的整轮应如何,以及游戏结束的条件是什么!

答案 2 :(得分:0)

为什么你在使用do-while。我看不到它的使用。导致问题的因为你永远不会增加k而且它似乎对我来说是无限循环