Java-如何扫描令牌并在其存在且为双精度标记后检查该令牌

Java-如何扫描令牌并在其存在且为双精度标记后检查该令牌,java,java.util.scanner,Java,Java.util.scanner,下面的程序有问题。我希望输入的表单“value”后跟一个双精度值,如果输入不是这种表单,我希望返回一条错误消息。本质上,我想检查第一个单词是否是“value”(如果不是,返回“false”),然后我想检查是否有另一个标记,并且这个标记是否是double(如果不是这样,返回false)。不过,我遇到了麻烦,因为如果我只是输入“value”作为输入,程序只会等待我输入另一个令牌,而不是像我希望的那样返回“value expected”。代码如下: import java.util.Scanner;

下面的程序有问题。我希望输入的表单“value”后跟一个双精度值,如果输入不是这种表单,我希望返回一条错误消息。本质上,我想检查第一个单词是否是“value”(如果不是,返回“false”),然后我想检查是否有另一个标记,并且这个标记是否是double(如果不是这样,返回false)。不过,我遇到了麻烦,因为如果我只是输入“value”作为输入,程序只会等待我输入另一个令牌,而不是像我希望的那样返回“value expected”。代码如下:

import java.util.Scanner;
public class scanCheck {
    public static void main(String[] args) {

Scanner kb = new Scanner(System.in);
double a;
String str;

str = kb.next();
if (!str.equals("value"))
    System.out.print("Invalid format.");
else {
    if (kb.hasNext())
        if (kb.hasNextDouble())
            a = kb.nextDouble();
        else
            System.out.println("Value expected.");
    else 
        System.out.println("Value expected.");
    }
    }
}

谢谢大家!

因为您正在等待用户命令,所以kb.hasNext()永远不会真正计算为false。所以这段代码是按照它应该的方式运行的。如果希望“预期值”出现在用户键入值之后,请移动println语句

else {
    System.out.println("Value expected.");
    if (kb.hasNextDouble()){
         a = kb.nextDouble();
    }else {
         System.out.println("Value expected.");
    }
试试这个:

    str = kb.next();
    if (!str.equals("value")){
        System.out.print("Invalid format.");
        System.exit(0);
       }

好吧,这更有意义,而且可能更方便用户。非常感谢你!这并不能解决OP的问题。如果输入了“值”,则您的答案没有帮助。