2012-07-23 3 views
0

나는 카드 게임을 쓰고 있습니다. 나는 문제가있어서 그것을 알아낼 수 없다. 먼저 사용자가 배열 크기를 지정하게하여 배열에 플레이어를 추가하려고합니다. 그런 다음 사용자에게 배열에 추가 할 플레이어의 이름을 입력하도록 요청하십시오. 첫 루프 "Enter name :"중에 루프에 문제가 있습니다. 사용자가 입력을하기 전에 2 번 인쇄됩니다. 누군가가 이걸 도와 줄 수 있어요. 고맙습니다. 당신이 String name = keyboard.nextLine();루핑 스캐너 입력

+1

'nextInt'를 가진 플레이어의 수를 읽은 후에 여분의'nextLine'이 필요합니다. 왜냐하면 그 숫자 다음에 새로운 줄이 있기 때문입니다. – nhahtdh

+0

[이 문제의 다른 해결 방법에 대한 이전 답변] (http://stackoverflow.com/a/11541456/1343161)을 참조하십시오. – Keppil

답변

0

에서 keyboard.next() 기능이 아닌 keyboard.nextLine() 함수를 호출 할 수있는 것보다 이름은 한 단어로 구성되어있는 경우 이미 언급 한 바와 같이

public class Dealer { 
    Scanner keyboard = new Scanner(System.in); 
    private Deck deck = new Deck(); 
    Player[] players; 

    public static void main(String []args){ 
     new Dealer(); 
    } 

    public Dealer(){ 
     addPlayers(); 
     print(); 
    } 

    private void addPlayers(){ 
     int num = numPlay(); 
     players = new Player[num]; 

     for(int i=0; i<num; i++){ 
      System.out.println("Enter name: "); 
      String name = keyboard.nextLine(); 
      players[i] = new Player(name); 
     } 
    } 

    private int numPlay(){ 
     System.out.print("Enter how many players: "); 
     return keyboard.nextInt(); 
    } 

    private void print(){ 
     for(Player x: players) 
      System.out.println(x.toString()); 
    } 
} 
+0

고마워,이게 정말 설명해. –

0

이 경우,

private int numPlay(){ 
     System.out.print("Enter how many players: "); 
     return Integer.parseInt(keyboard.nextLine()); 
    } 
+0

선행/후행 공백이 없다는 가정하에 제공됩니다. nextInt(), nextLine()보다 조금 더 엄격합니다. – nhahtdh

0

작동합니다 numPlay()이라고하면 스캐너는 Enter 키를 눌러 줄 수와 줄 끝 문자를 읽습니다. nextInt()를 사용 했으므로, 개행 문자는 스캐너에 남아 있습니다.

따라서 일부 문자열이 버퍼에 남아 있으며 스캐너에서 다음 호출을 호출하면이 새 행이 반환됩니다. 그것은 당신의 의견을 기다리지 않습니다.

또한 '\ n'이라는 이름의 플레이어를 만드는 것처럼 보입니다.

+0

이름이 둘 이상의 단어로 구성된 경우 어떻게됩니까? –

관련 문제