我正在写一个随机机会游戏来挑选一个随机的赢家。我使用for循环将玩家输入数组,但它不允许我为第一个玩家输入任何东西。这是代码:
import java.util.Scanner;
import java.util.Random;
public class Run {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
Random rand = new Random();
System.out.println("How many people will play???");
int playernum = input.nextInt();
String players[] = new String[playernum];
for(int i = 0; i < playernum; i++){
System.out.println("Who is player #" + (i+1)+"?");
players[i] = input.nextLine();
}
System.out.println("The winner is: " + players[rand.nextInt(playernum)]);
}
}
答案 0 :(得分:4)
input.nextInt()
调用读取整数,但在输入流中保留新行字符未读,因此循环中的input.nextLine()
调用只是在第一次迭代中读取该字符。
所以,你需要以下 -
int playernum = input.nextInt();
input.nextLine(); //read the unread new line character from the input stream
答案 1 :(得分:2)
使用以下代码。代码中的注释解释了变化。
import java.util.Scanner;
import java.util.Random;
public class Run {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
Random rand = new Random();
System.out.println("How many people will play???");
int playernum = input.nextInt();
input.nextLine(); //ADDED LINE
String players[] = new String[playernum];
for(int i = 0; i < playernum; i++){
System.out.println("Who is player #" + (i+1)+"?");
players[i] = input.nextLine();
}
System.out.println("The winner is: " + players[rand.nextInt(playernum)]);
}
}
我们添加了input.nextLine();
,因为input.nextInt();
会留下我们需要清除的剩余新行字符。它将这个新行字符设为 player 1
-Henry
答案 2 :(得分:0)
我认为您的问题出在players[i] = input.nextLine();
这一行。
我认为您正在寻找的是players[i] = input.next();
“使此扫描程序超过当前行并返回跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。” 请参阅API说明here。
答案 3 :(得分:0)
在for循环中使用input.next()
代替input.nextLine()
。这样,未使用的新行字符不会成为问题,就像@BheshGurung在他的回答中解释的那样。