我想要一个要求用户输入字符的扫描仪,但是如果输入了多个字符,它应该再次提示用户只有一个字符。
这是我到目前为止所做的:
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
你看到第三行?它要求另一个提示。我想摆脱它,并使其使用输出的第二行中的字母代替。有什么想法吗?
答案 0 :(得分: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个字符,否则播放器只能按回车键,你的代码会因为输入有0个字符而崩溃。上面的代码也是这样做的。
答案 1 :(得分:2)
因为这一行:
char inputLetter = letterScan.next().charAt(0);
删除上述行&改变这个陈述:
while(letterScan.nextLine().length()>1)
到
String line = letterScan.nextLine();
while(line.length()>1)
答案 2 :(得分: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()
以获得新输入,但在此我们保存您的输入,然后获取第一个字符。