4

ユーザーに文字の入力を求めるスキャナーが必要ですが、複数の文字が入力された場合は、ユーザーに1文字だけ入力するように再度要求する必要があります。

これは私がこれまでに持っているものです:

System.out.print("(Player 2) Guess a letter: ");
Scanner letterScan = new Scanner(System.in);
while(letterScan.nextLine().length()>1)
{
    System.out.print("(Player 2) Please guess only one letter: ");

    //char inputLetter = letterScan.next().charAt(0);
}
char inputLetter = letterScan.next().charAt(0);
System.out.println("letter: " + inputLetter);

唯一の問題は、これを実行したときの出力です。

(Player 2) Guess a letter: asfa
(Player 2) Please guess only one letter: a
s
letter: s

三行目が見えますか?別のプロンプトを求めています。それを取り除き、代わりに出力の2行目の文字を使用するようにしたいと思います。何か案は?

4

3 に答える 3

5

letterScan.next()正しい行を取得した後、行は追加の文字を読み取っています。次のように、受け取った 1 文字の最初の入力を保存する必要があります。

System.out.print("(Player 2) Guess a letter: ");
Scanner letterScan = new Scanner(System.in);
String line = "";
//just check for one character.
while((line=letterScan.nextLine()).length()!=1)
{
    System.out.print("(Player 2) Please guess only one letter: ");
}
char inputLetter = line.charAt(0);
System.out.println("letter: " + inputLetter);

また、while ループを変更して、入力に 1 文字しか含まれていないことを確認します。そうしないと、プレーヤーが Enter キーを押すだけで、入力に 0 文字が含まれるため、コードがクラッシュする可能性があります。上記のコードもこれを行います。

于 2013-07-26T19:49:12.680 に答える
2

Use this code... コード内のコメントで答えが説明されています。

    System.out.print("(Player 2) Guess a letter: "); //prompt
    Scanner letterScan = new Scanner(System.in);
    String input = ""; //create string for input
    while((input = letterScan.nextLine()).length() != 1) { //while they entered more than one letter
        System.out.print("(Player 2) Please guess only one letter: "); //re-prompt
    }
    char inputLetter = input.charAt(0);
    System.out.println("letter: " + inputLetter); //print the letter

以前は.next()、新しい入力を取得するために再度取得していましたが、ここでは入力を保存してから最初の文字を取得します。

于 2013-07-26T19:54:39.987 に答える
2

その理由は、次の行です。

char inputLetter = letterScan.next().charAt(0);

上記の行を削除して、次のステートメントを変更します。

while(letterScan.nextLine().length()>1)

String line = letterScan.nextLine();
while(line.length()>1)
于 2013-07-26T19:49:02.077 に答える