0

カードゲームを書いています。問題が発生しましたが、それを理解できないようです。最初にユーザーに配列サイズを指定させることで、プレーヤーを配列に追加しようとしています。次に、配列に追加するプレーヤーの名前を入力するようにユーザーに依頼します。ループに問題があります。最初のループで、ユーザーが入力できるようになる前に「Enter name:」が 2 回出力されます。誰かがこれを手伝ってくれますか。ありがとうございました。

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());
    }
}
4

3 に答える 3

0

名前が 1 つの単語で構成されている場合は、keyboard.next()関数ではなく関数をkeyboard.nextLine()呼び出すことができますString name = keyboard.nextLine();

于 2012-07-23T12:09:31.173 に答える
0

既に述べたように、 を呼び出すnumPlay()と、スキャナは数値と、Enter キーを押して指定された行末文字を読み取ります。nextInt() を使用したため、改行はスキャナーに残ります。

したがって、一部の文字列がバッファに残っており、スキャナから読み取る次の呼び出しでは、単にこの新しい行が返されます。入力を待ちません。

さらに、「\n」という名前のプレーヤーを作成するようです。

于 2012-07-23T12:09:43.323 に答える
0

これはうまくいくはずです

private int numPlay(){
        System.out.print("Enter how many players: ");
        return Integer.parseInt(keyboard.nextLine());
    }
于 2012-07-23T12:05:50.777 に答える