Java 循环扫描输入

Java 循环扫描输入,java,arrays,loops,Java,Arrays,Loops,我在写纸牌游戏。我遇到了一个问题,似乎无法解决。我试图通过首先让用户指定数组大小来将玩家添加到数组中。然后要求用户输入要添加到阵列中的玩家的名称。我有一个循环的问题,在第一个循环中“输入名称:”将打印2次,然后用户才能输入。有人能帮我吗。多谢各位 public class Dealer { Scanner keyboard = new Scanner(System.in); private Deck deck = new Deck(); Player[] players;

我在写纸牌游戏。我遇到了一个问题,似乎无法解决。我试图通过首先让用户指定数组大小来将玩家添加到数组中。然后要求用户输入要添加到阵列中的玩家的名称。我有一个循环的问题,在第一个循环中“输入名称:”将打印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());
    }
}
公共类经销商{
扫描仪键盘=新扫描仪(System.in);
专用甲板=新甲板();
玩家[]玩家;
公共静态void main(字符串[]args){
新经销商();
}
公共交易商(){
addPlayers();
打印();
}
私人玩家(){
int num=numPlay();
玩家=新玩家[num];
对于(inti=0;i而言,这应该是可行的

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

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

,扫描仪读取数字和按Enter键给出的行尾字符。由于您使用了nextInt(),换行符仍保留在扫描仪中

因此,缓冲区中还有一些字符串,下一个从扫描仪读取的调用将返回这一新行;它不会等待您的输入


此外,它似乎创建了一个名为“\n”的播放机。

在使用
nextLine
读入播放机的数量后,您需要额外的
nextLine
,因为该数字后面有一个尾随新行。请参见我的。这是因为假设没有前导/尾随空格。这比nextInt()更严格一些,然后是一个nextLine()。如果名称由多个单词组成怎么办?谢谢,这就很好地解释了这一点。