测量扫描仪输入长度。

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

看到第三行了吗?它正在请求另一个提示符。我想摆脱那个提示符,使其使用输出中第二行的字母。有什么建议吗?

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个字符,否则玩家可能只是按下回车键,您的代码将崩溃,因为输入中没有任何字符。上面的代码也是如此。


这样行不通。在 while 循环条件中,你正在将字符串与数字进行比较。 - Mo2
不确定你们在这里说什么... 我发布的代码运行良好。我进行了一次小编辑。也许你们的屏幕还没有刷新? - William Morrison
我不确定你为什么将 ">" 改成了 "==",因为这改变了我所需的条件,但除此之外,代码运行正常。我将 == 又改回了 >1,就像之前一样。关键在于一开始有一个空字符串。谢谢。 - Mo2
@user2124252,我搞错了,它应该是!=而不是==。如果输入一个长度为0的字符串,>1将允许循环退出,这意味着您在下一行引用字符0将导致崩溃。尝试使用>1,只需按回车键而不输入任何内容即可。如果您不使用!=1,则对于该情况它将会崩溃。 - William Morrison
我看到你把它改成了a !=。谢谢你。这让我重新考虑了一下,因为我没有考虑到一个空的条目。 - Mo2
1
@user2124252,考虑所有可能的输入确实很困难。感谢您的接受,祝编码愉快! - William Morrison

2
由于这行代码:
char inputLetter = letterScan.next().charAt(0);

删除上面的行 & 更改此语句:

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

为了

String line = letterScan.nextLine();
while(line.length()>1)

1
+1,虽然while循环也有缺陷。我在我的答案中解决了这个问题。 - William Morrison
不起作用。我得到了以下输出: (玩家2)猜一个字母:adad adsad ada ada (玩家2)请只猜一个字母:(玩家2)请只猜一个字母:(玩家2)请只猜一个字母:(玩家2)请只猜一个字母:(玩家2)请只猜一个字母:(玩家2)请只猜一个字母:(玩家2) - Mo2
1
@user2124252,你试试我的吗? - William Morrison

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()来获取新的输入,但是这里我们保存你的输入并获取第一个字符。


While循环也有缺陷。 - William Morrison
@WilliamMorrison 我的是什么? - Dev
不是你的代码有问题,而是原帖中的代码有问题。如果没有输入,它会崩溃。我在我的回答中已经解决了这个问题,提醒一下。 - William Morrison
@WilliamMorrison 哦...明白了。 - Dev
@WilliamMorrison 其实,你的 while 循环有缺陷... ;) 我已经编辑过了。 - Dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接