Java while 循环跳过用户输入的第一次迭代
Java while loop skips first iteration for user input
我正在制作游戏,目前我需要为 'heroes' 设置名称!这需要玩家输入英雄的名字。
问题是,当它在控制台中询问英雄 1 的名字时,它只是跳过并直接转到英雄 2。
如果我使用 .next() 而不是 .nextLine(),它可以工作,但它将任何带有 space 的名称解释为两个不同的名称!
这是代码,我希望你明白!提前致谢:)
public void heroNames() //sets the name of heroes
{
int count = 1;
while (count <= numHeroes)
{
System.out.println("Enter a name for hero number " + count);
String name = scanner.nextLine();
if(heroNames.contains(name)) //bug needs to be fixed here - does not wait for user input for first hero name
{
System.out.println("You already have a hero with this name. Please choose another name!");
}
else
{
heroNames.add(name);
count++; //increases count by 1 to move to next hero
}
}
}
如果你用 Scanner.nextInt
读取 numHeroes
,一个换行符保留在它的缓冲区中,因此下面的 Scanner.nextLine
返回一个空字符串,有效地导致两个连续的序列Scanner.nextLine()
获得第一个英雄名字
在下面的代码中,我建议您使用 Integer.parseInt(scanner.nextLine)
读取英雄数量,并且作为一种风格,不要使用局部变量 count
,因为它隐式绑定到大小heroNames
合集中的:
Scanner scanner = new Scanner(System.in);
List<String> heroNames = new ArrayList<>();
int numHeroes;
System.out.println("How many heroes do you want to play with?");
while (true) {
try {
numHeroes = Integer.parseInt(scanner.nextLine());
break;
} catch (NumberFormatException e) {
// continue
}
}
while (heroNames.size() < numHeroes) {
System.out.println("Type hero name ("
+ (numHeroes - heroNames.size()) + "/" + numHeroes + " missing):");
String name = scanner.nextLine();
if (heroNames.contains(name)) {
System.out.println(name + " already given. Type a different one:");
} else if (name != null && !name.isEmpty()) {
heroNames.add(name);
}
}
System.out.println("Hero names: " + heroNames);
我正在制作游戏,目前我需要为 'heroes' 设置名称!这需要玩家输入英雄的名字。 问题是,当它在控制台中询问英雄 1 的名字时,它只是跳过并直接转到英雄 2。 如果我使用 .next() 而不是 .nextLine(),它可以工作,但它将任何带有 space 的名称解释为两个不同的名称!
这是代码,我希望你明白!提前致谢:)
public void heroNames() //sets the name of heroes
{
int count = 1;
while (count <= numHeroes)
{
System.out.println("Enter a name for hero number " + count);
String name = scanner.nextLine();
if(heroNames.contains(name)) //bug needs to be fixed here - does not wait for user input for first hero name
{
System.out.println("You already have a hero with this name. Please choose another name!");
}
else
{
heroNames.add(name);
count++; //increases count by 1 to move to next hero
}
}
}
如果你用 Scanner.nextInt
读取 numHeroes
,一个换行符保留在它的缓冲区中,因此下面的 Scanner.nextLine
返回一个空字符串,有效地导致两个连续的序列Scanner.nextLine()
获得第一个英雄名字
在下面的代码中,我建议您使用 Integer.parseInt(scanner.nextLine)
读取英雄数量,并且作为一种风格,不要使用局部变量 count
,因为它隐式绑定到大小heroNames
合集中的:
Scanner scanner = new Scanner(System.in);
List<String> heroNames = new ArrayList<>();
int numHeroes;
System.out.println("How many heroes do you want to play with?");
while (true) {
try {
numHeroes = Integer.parseInt(scanner.nextLine());
break;
} catch (NumberFormatException e) {
// continue
}
}
while (heroNames.size() < numHeroes) {
System.out.println("Type hero name ("
+ (numHeroes - heroNames.size()) + "/" + numHeroes + " missing):");
String name = scanner.nextLine();
if (heroNames.contains(name)) {
System.out.println(name + " already given. Type a different one:");
} else if (name != null && !name.isEmpty()) {
heroNames.add(name);
}
}
System.out.println("Hero names: " + heroNames);