Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测量扫描仪输入长度_Java_Input_Char - Fatal编程技术网

Java 测量扫描仪输入长度

Java 测量扫描仪输入长度,java,input,char,Java,Input,Char,我想要一个扫描仪,它会要求用户输入一个字符,但是如果输入了多个字符,它会再次提示用户只输入一个字符 这就是我到目前为止所做的: 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 o

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

这就是我到目前为止所做的:

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
看到第三行了吗?它要求另一个提示。我想去掉它,让它使用输出中第二行的字母。有什么想法吗?

因为这一行:

char inputLetter = letterScan.next().charAt(0);
删除上述行并更改此语句:

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


lettscan.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个字符。上面的代码也可以这样做。

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

    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()
以获取新的输入,但这里我们保存您的输入,然后获取第一个字符。

+1,尽管while循环也有缺陷。我在回答中提到了这一点,但这不起作用。我得到以下结果:(玩家2)猜一个字母:adad adsad ada ada ada(玩家2)请只猜一个字母:(玩家2)请只猜一个字母:(玩家2)请只猜一个字母:(玩家2)请只猜一个字母:(玩家2)请只猜一个字母:(玩家2)@你试试我的?那不行。您正在将字符串与while循环条件中的数字进行比较。不确定大家在说什么。。。我发布的代码运行良好。我确实做了一个小编辑。也许它还没有在你的屏幕上刷新?我不知道你为什么把“>”改成“==”,因为这会改变我需要的条件,但在其他情况下代码可以工作。我把==改回了>1,就像以前一样。诀窍是在开始时使用空字符串。谢谢。@user2124252我弄错了,应该是
=,而不是
==
<代码>>1
将允许循环在输入长度为0的字符串时退出,这意味着引用字符0的下一行将导致崩溃。使用
>1
进行尝试,只需在无输入的情况下按return键即可。如果您不使用
,它将在这种情况下崩溃=1 < /代码> @ USE2124252很难考虑所有可能的输入。感谢接受,快乐编码!而回路也有缺陷。@williammerrison我的是?不,OP的是,不是你的。它将在没有输入的情况下崩溃。我在回答中已经提到了这一点,请注意。@williammerrison啊。。。明白了。@williammerrison实际上,你的while循环有缺陷…;)我编辑了它。
    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