在java中使用for循环来捕获玩家名称就是输出错误的数字并跳过第一个玩家



我正在用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

如有任何帮助,我们将不胜感激。

在找到问题的关键之前,我们可以在一定程度上简化(并修复(代码:

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,而不是将其作为参数。除此之外,还有许多其他问题涉及这个问题。例如,您可以继续尝试读取行,直到接收到的字符串的长度为正。

最新更新