【问题标题】:Using a for-loop in java to capture player names is outputting wrong number and skipping first player在 Java 中使用 for 循环来捕获玩家名称会输出错误的数字并跳过第一个玩家
【发布时间】:2021-07-04 13:46:26
【问题描述】:

我正在用 java 创建一个游戏。我已经编写了一个单独的方法来捕获正在玩的玩家数量(这是有效的),并且通过下面的方法我试图捕获他们的名字,将其打印到屏幕上,并将它们放在一个 ArrayList 中。

public void addPlayers(Scanner scanner) {
        this.players = new ArrayList<Player>();
        int playerNumber = 1;
        String playerName = null;

        for (int loop = 0; loop <= getNumberOfPlayers(); loop++) {
            System.out.println("Player number " + playerNumber++ + ", please type your name");
            playerName = scanner.nextLine();
            System.out.println("your name is: " + playerName);
        }
    }

有四个玩家在玩,这是我输出到屏幕时返回的数字 System.out.println(this.numberOfPlayers),所以我知道 getNumberOfPlayers() 是正确的。

这是我通过 addPlayers 方法得到的输出:

Player number 1, please type your name
your name is: 
Player number 2, please type your name
john
your name is: john
Player number 3, please type your name
sally
your name is: sally
Player number 4, please type your name
fred
your name is: fred
Player number 5, please type your name
eric
your name is: eric

我当前的代码使玩家 1 无法输入他们的姓名,并从循环中输出 5 个玩家。

我想要发生的事情:

Player number 1, please type your name
fred
your name is: fred
Player number 2, please type your name
john
your name is: john
Player number 3, please type your name
sally
your name is: sally
Player number 4, please type your name
mary
your name is: mary

任何帮助将不胜感激。

【问题讨论】:

  • 您可以使用loop &lt; getNumberOfPlayers()修复循环。
  • 两个问题:你从 0 循环到 4,产生 5 个玩家。并且在输入玩家人数时还剩下一个 CR,所以第一个scanner.nextline() 立即给出了空字符串

标签: java for-loop arraylist iteration java.util.scanner


【解决方案1】:

在解决问题的症结之前,我们可以稍微简化(并修复)代码:

public void addPlayers(Scanner scanner) {
    this.players = new ArrayList<Player>();

    for (int playerNumber = 1; playerNumber <= getNumberOfPlayers(); playerNumber++) {
        System.out.println("Player number " + playerNumber + ", please type your name");
        String playerName = scanner.nextLine();
        System.out.println("your name is: " + playerName);
    }
}

对于扫描仪输入似乎最初被跳过的问题,这表明在您输入函数之前它已经有一些输入(此处为空行)要处理,因此不需要等待你的输入。似乎最好在方法中声明 Scanner 而不是将其作为参数。否则,还有许多其他问题涉及此问题。例如,您可以继续尝试读取行,直到收到的字符串具有正长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多