Java while 循环跳过用户输入的第一次迭代

标签 java while-loop io java.util.scanner

我正在制作一款游戏,目前我需要为“英雄”设置名字!这需要玩家输入英雄的名字。 问题是,当它在控制台中询问英雄 1 的名字时,它只是跳过并直接转到英雄 2。 如果我使用 .next() 而不是 .nextLine(),它可以工作,但它会将任何带有空格的名称解释为两个不同的名称!

这是代码,希望有意义!预先感谢大家:)

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 将返回空字符串code>,有效地产生了两个连续的 Scanner.nextLine() 序列来获取第一个英雄名称。

在下面的代码中,我建议您使用 Integer.parseInt(scanner.nextLine) 读取英雄数量,并且出于风格考虑,不要使用局部变量 count 因为它隐式绑定(bind)到 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);

关于Java while 循环跳过用户输入的第一次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49729939/

相关文章:

java - 如何放置.getScaledInstance

java - ForkJoinPool 类的 execute() 方法

java - 如何针对不同的值多次运行测试方法

java - 如何在 while 语句中表示范围?

Java 文件 IO 因大量连续写入而变慢

regex - 使用 Julia 和 Regex 从文件中收集字符串并写入输出文件

Java:NIO 和 NIO.2 到底有什么区别?

java - 使用单个正则表达式从一个字符串中提取几个子字符串

sql - T-SQL While 循环和串联

PHP While 循环从多个 'Joined' 表中分离唯一类别