我已经着手开发一个程序来跟踪我的好友和我在玩飞镖时的得分。不幸的是,当我输入播放器数量并且该方法要求输入播放器名称时,它会跳过播放器1的输入。我使用了input.nextLine(),因为我需要能够一次在一个字符串中记录名字和姓氏。它对每个后续播放器都很好,但默认情况下绕过播放器1。 代码如下:
if (playerCount >= 1)
{
System.out.println("Enter name for Player 1: ");
name1 = input.nextLine();
}
if (playerCount >= 2)
{
System.out.println("Enter name for Player 2: ");
name2 = input.nextLine();
}
if (playerCount >= 3)
{
System.out.println("Enter name for Player 3: ");
name3 = input.nextLine();
}
if (playerCount >= 4)
{
System.out.println("Enter name for Player 4: ");
name4 = input.nextLine();
}
if (playerCount >= 5)
{
System.out.println("Enter name for Player 5: ");
name5 = input.nextLine();
}
if (playerCount >= 6)
{
System.out.println("Enter name for Player 6: ");
name6 = input.nextLine();
}
if (playerCount >= 7)
{
System.out.println("Enter name for Player 7: ");
name7 = input.nextLine();
}
if (playerCount >= 8)
{
System.out.println("Enter name for Player 8: ");
name8 = input.nextLine();
}
例如,当我输入4位玩家时,我会得到:
输入玩家人数:4 输入玩家1的名称:
输入玩家2的姓名:Johnny Bravo
输入玩家3的名字:凯文·培根
输入玩家4的名字:凯尔
玩家:4
[此空格为空白]
Johnny Bravo
凯文培根
凯尔
请让我知道为什么这样做,以及尽管有代码冗余,但如果使用以下内容仍可正常运行,则为什么要替换player1:
if (playerCount >= 1)
{
System.out.println("Enter name for Player 1: ");
name1 = input.nextLine();
name1 = input.nextLine();
}
答案 0 :(得分:0)
实时演示:https://repl.it/repls/LimitedGlitteringComments
.nextInt()
的原因只是获取下一个整数,而不是换行符或其他任何内容。因此,下次您说.nextLine()
时,只会得到\n
。这就是为什么在.nextInt()
之后我做了input.nextLine();
我还通过加入for循环来消除了大的if
。
希望这对您有帮助!
int numberOfPlayers;
Scanner input = new Scanner(System.in);
System.out.println("Enter number of players:");
numberOfPlayers = input.nextInt();
input.nextLine();
String[] arrayOfPlayers = new String[numberOfPlayers];
for (int i = 1; i <= numberOfPlayers; i++) {
System.out.println("Enter name for Player " + i + ":");
arrayOfPlayers[i-1] = input.nextLine();
}
// print list
for (String player : arrayOfPlayers) {
System.out.println(player);
}
input.close();
答案 1 :(得分:0)
使用以下代码获取您的玩家人数。
int playerCount = Integer.parseInt(input.nextLine());
nextInt()不会消耗您输入playerCount输入后输入的换行符。在下一个nextLine()调用中消耗掉它。