4

我想要一个要求用户输入一个字符的扫描仪,但是如果输入了多个字符,它应该再次提示用户输入一个字符。

这是我到目前为止所拥有的:

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

看到第三行了吗?它要求另一个提示。我想摆脱它并使它使用输出中第二行中的字母。有任何想法吗?

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

这是因为这一行:

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 回答
2

使用此代码...代码中的注释解释了答案。

    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 回答