0

我正在写一个纸牌游戏。我遇到了一个问题,似乎无法弄清楚。我试图通过首先让用户指定数组大小来将玩家添加到数组中。然后要求用户输入要添加到数组中的玩家名称。我的循环有问题,在第一个循环期间,“输入名称:”将在用户输入之前打印 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

这应该工作

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

如果名称由一个单词组成,则您可以调用该keyboard.next()函数而不是该keyboard.nextLine()函数String name = keyboard.nextLine();

于 2012-07-23T12:09:31.173 回答
0

如前所述,如果您调用numPlay(),扫描仪会读取数字和按 Enter 键给出的行结束符。由于您使用了 nextInt(),因此换行符保留在扫描仪中。

Therefore, some string is remaining in the buffer and the next call to read from the scanner simply returns this new line; it does not wait for your input.

In addition, it seems as if it creates an player with a name of '\n'.

于 2012-07-23T12:09:43.323 回答