Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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_Exception - Fatal编程技术网

Java 如何管理用户输入字母而不是数字?

Java 如何管理用户输入字母而不是数字?,java,exception,Java,Exception,我正在尝试编写一个自动售货机程序,除了告诉它如何处理用户输入的字母而不是数字之外,它做得非常好。这是我试图找出的代码块: System.out.print("Please enter how much money you have to spend (enter -1 to shut down): "); double custMoney = scanner.nextDouble(); if (custMoney <= 0) { Sy

我正在尝试编写一个自动售货机程序,除了告诉它如何处理用户输入的字母而不是数字之外,它做得非常好。这是我试图找出的代码块:

System.out.print("Please enter how much money you have to spend (enter -1 to shut down): ");
        double custMoney = scanner.nextDouble();
        if (custMoney <= 0) {
            System.out.println("Thank you for your business!");
            System.exit(0);
        }

我如何解决这个问题,如果他们输入一个字母,它会提示他们输入一个有效的数字?

下面是一些双精度编码示例

try {
    System.out.print("Enter an integer number: ");
    long i = in.nextLong();
    System.out.print("Thanks, you entered: ");
    System.out.println(i);
    break;
}
 catch (InputMismatchException ex) {
    System.out.println("Error in your input");
    in.next(); // Read and discard whatever string the user has entered
}

正如@Max所说,您应该将输入读取为字符串,并在它不是数字时提醒用户,我添加了while(!numberrok),这样,如果用户输入的是字母而不是数字(或无效数字),它将继续询问;)

希望这对你有帮助

   String custMoney = scanner.next();
    double custMoneyValue;
    boolean numberOk=false;
    while(!numberOk)
    try {
        custMoneyValue = Double.parseDouble(custMoney);
        if (custMoneyValue <= 0) {
            System.out.println("Thank you for your business!");
            numberOk=true;
            System.exit(0); // would make the while loop condition useless...

        }
    }catch (NumberFormatException e) {
            System.out.println("Please insert a number...");
            custMoney = scanner.next();
    }
String custMoney=scanner.next();
双重价值;
布尔数rok=false;
而(!numberrok)
试一试{
custMoneyValue=Double.parseDouble(custMoney);

如果(custMoneyValue),我不确定我将如何为这种想法编写代码,谷歌搜索它,你就会知道。“如何读取字符串”,“如何将字符串转换为数字”。实际上,使用
scanner.hasNextDouble
可以检查输入是否是双精度的,并且可以在不捕获任何异常的情况下相应地执行操作(如果不是双精度:)顺便说一句:这与另一个问题非常接近,我刚刚用integer发布了一个简单的例子:我不知道如何在这里直接回复用户并正确设置格式……但如果您能看一下并告诉我我做错了什么,我在我的帖子上发布了一条评论:)
   String custMoney = scanner.next();
    double custMoneyValue;
    boolean numberOk=false;
    while(!numberOk)
    try {
        custMoneyValue = Double.parseDouble(custMoney);
        if (custMoneyValue <= 0) {
            System.out.println("Thank you for your business!");
            numberOk=true;
            System.exit(0); // would make the while loop condition useless...

        }
    }catch (NumberFormatException e) {
            System.out.println("Please insert a number...");
            custMoney = scanner.next();
    }