Java For循环问题

时间:2013-07-02 03:02:09

标签: java

我正在写一个随机机会游戏来挑选一个随机的赢家。我使用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 个答案:

答案 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在他的回答中解释的那样。