0

我正在写一个随机机会游戏来选择一个随机的赢家。我正在使用 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)]);

}

}
4

4 回答 4

4

input.nextInt()调用读取整数,但在输入流中未读取换行符,因此input.nextLine()循环中的调用仅在第一次迭代中读取该字符。

所以,你需要以下 -

int playernum = input.nextInt();
input.nextLine(); //read the unread new line character from the input stream
于 2013-07-02T03:06:50.760 回答
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();留下了我们需要清除的剩余换行符。就是把这个新的角色作为玩家 1

-亨利

于 2013-07-02T03:13:11.063 回答
0

我认为你的问题是在这条线上players[i] = input.nextLine();

我想你要找的是,players[i] = input.next();

“将此扫描器前进到当前行并返回被跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。” 请参阅此处的 API 说明。

于 2013-07-02T03:08:57.313 回答
0

在 for 循环中使用input.next()而不是。input.nextLine()这样,未使用的换行符就不会成为问题,就像@BheshGurung 在他的回答中解释的那样。

于 2013-07-02T03:12:13.803 回答