2012-01-02 3 views
0

이 간단한 프로그램은 플레이어의 수와 이름을 묻습니다. (마지막으로) 점수를 계산합니다.하지만 다음 플레이어에게가는 이유는 모르겠습니다. 내 코드를보세요.어떻게이 권리를 인쇄 할 수 있습니까?

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:...... 
........ 

하지만 나는 내가이 작업을 수행 할 수있는 'B'.How에 대한 점수를 계산하는'A '에 대한 점수를 계산 한 후 원하는 :

이 반환?

+1

나는 이미 답변을 얻은 것으로 생각한다. http://stackoverflow.com/questions/8644176/how-can-i-add-elements-in-hashmap/8644194#8644194 –

+1

'k' 변수를 보라! 당신은 1로 설정 한 다음'do {...} while (k> 0);'<- 조건이 항상 참이면 누락 된 코드에서 k를 감소시키지 않는 한 두 번째 항목을 순환하지 않습니다. – fge

+0

@ JigarJoshi하지 않고 일하는 동안 작동하지만 지금은 내가 그들을 포함시켜야합니다 ... – nick

답변

0

do ... while 루프 (루프 조건에 포함 된 유일한 변수)에 변수 k을 변경하지 마십시오. 즉, 첫 번째 플레이어와 영원히 반복됩니다! 당신은 심지어 상태를 제외하고 아무 곳이나 루프 내부 k의 값을 참조하지 않는다 - 당신이 수행 할 작업을 올바르게 해석하고있어 경우

, 당신은 완전히 do {} while (k>0) 줄을 제거한다 다른 방법으로 플레이어를 반복하는 것이 나머지일까요?

또는 게임 라운드를 수행하는 데 루프가 있어야하는 경우 (한 라운드는 각 플레이어에 대해 한 턴의 컬렉션입니다), 잘못된 위치에 있습니다. 이는 for ... 루프를 반복해야합니다. 내부 플레이어가 아닌 플레이어; 물론 게임을 끝내기에 적절한 조건을 제시해야합니다. 현재 사용하고있는 변수 k에 실제로 의존하는 경우이 변수는 somwhere를 변경해야합니다. 네버 앤딩 루프!

그러나 더 많은 정보없이 코드를 해석하기는 어렵습니다. 게임에서 전체 라운드가 어떻게 나타나야하는지, 그리고 게임이 끝난 상태에 대한 자세한 정보로 질문을 업데이트하십시오!

+0

나는 do-while을 사용하여 게임을 끝내고 k = 0이 될 때까지 선수들이 차례대로 게임을 진행합니다. do-while ...은 계속됩니다. – nick

+0

@nick : 이해가되지 않습니다. 나에게 - 너는 그것을 위해 무엇을 필요로 할까? 그것이 현재로서는, 그것이하고있는 유일한 일은 새로운 루프를 만드는 것입니다! – codeling

0

을 당신은 당신이 결코 K 증가하지 않습니다으로 문제를 일으키는 당연히-에서 잠시 할 하시던의 소용을 볼 사용하고 나에게

+0

나는 do-while을 사용하여 게임을 끝내고 k = 0이 될 때까지 선수들이 차례대로 게임을 진행합니다. do-while ... 내 생각을 계속합니다 ... – nick

1

do while 제거하십시오 infinte 루프 것으로 보인다 이유 - 너는 필요 없어. 또한 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"); 
} 

나는 당신이 뭘하려는 건지 이해가 안 인정해야하지만, 적어도이 코드는 코드가 의도하지 않습니다.

+0

답장을 보내 주셔서 감사합니다! 두 번째 플레이어의 점수 계산 ...하지만 나는 다시 fisrt 플레이어를 연주하고, 점수를 계산하고, 두 번째 등을 다시 한 번 플레이하고 싶습니다. 어떻게해야합니까? (내가 왜 do-while). – nick

관련 문제