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

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();ため、追加しました。この改行文字をプレーヤー1として配置していましたinput.nextInt();

-ヘンリー

于 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 に答える