0

我正在学习 Java,并且正在玩一些控制台应用程序。我正在尝试验证用户输入,并在用户输入错误时提示用户输入另一个值。每当我输入一个“空”值时,程序就会挂起,当我停止它时,它会吐出所有错误。我怎样才能真正检查空?

例子:

do{
            //prompt user for word
            System.out.print("\nType \"quit\" to exit \n");
            System.out.print("Enter a single word with no spaces: ");

            //check to make sure user entered a valid string
            if (in.hasNext()){
                strWord = in.next();
                int nWordLength = strWord.length();
                if(nWordLength > 0 && !strWord.isEmpty()){ 
                  //do a whole bunch of stuff
                  // removed for brevity
                }else{
                //alert user of invalid entry
                System.out.println("Not a valid word.");
            }else{
            //alert user of invalid entry
            System.out.println("Not a valid word.");
        }
}while (!strWord.equals("quit")); //end if user enters quit

System.out.println("You are now done with the program");

在我因为挂起而杀死我的程序后,我得到如下输出......

键入“quit”退出 输入一个不带空格的单词:不是一个有效的单词。

键入“quit”退出 输入一个不带空格的单词:不是一个有效的单词。

键入“quit”退出 输入一个不带空格的单词:不是一个有效的单词。

输入“quit”退出

进程以退出代码 -1 结束

4

2 回答 2

1

只是为了简化您的代码

     boolean isValidInput = false;
  do{
    //check to make sure user entered a valid string
    strWord = in.nextLine();

    if(!(strWord.isEmpty()) && !(Character.isWhiteSpace(strWord.charAt(0))))
    {
        isValidInput = true;
        //whatever goes here
    } 
    else
       System.out.println("incorrect word entered");

    }while(!isValidInput);
于 2013-10-06T00:39:11.930 回答
0

我假设in是一个Scanner

我认为问题是您的代码永远不会看到用户的输入。

如果您替换所有对hasNext()next()使用哪个缓冲区的调用hasNextLine()nextLine()等待用户按 Enter 会怎样?

于 2013-10-06T00:23:30.543 回答