Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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_User Input - Fatal编程技术网

Java 确保用户输入是双重的?

Java 确保用户输入是双重的?,java,user-input,Java,User Input,当使用扫描仪时,是否有办法检查用户输入是否符合我们的预期 假设我想要一个double,但用户输入了一个字符串,我可以做什么来提示用户重新输入double值 使用下面的代码,如果没有输入数字,我会得到一个不匹配异常。如果输入错误,我不希望程序崩溃 这是我的密码: 导入java.util.Scanner public class RoundingNumbers { private double y; private double x; public RoundingNumbers(){

当使用扫描仪时,是否有办法检查用户输入是否符合我们的预期

假设我想要一个double,但用户输入了一个字符串,我可以做什么来提示用户重新输入double值

使用下面的代码,如果没有输入数字,我会得到一个不匹配异常。如果输入错误,我不希望程序崩溃

这是我的密码: 导入java.util.Scanner

public class RoundingNumbers {

  private double y;
  private double x;
  public RoundingNumbers(){
    double y = 0;
    double x = 0;
  }

  public void getNumber(){
    System.out.print("Enter a decimal number: ");
    Scanner num = new Scanner(System.in);
    x = num.nextDouble();
  }

  public void roundNum(){
    y = Math.floor(x + 0.5);
  }

  public void displayNums(){
    System.out.println("The actual number is: " + x);
    System.out.println("The rounded number is: " + y);
  }

}

您可以将其包装在try-catch块中。请参见下面的示例函数

哎呀。我没有足够的关注,也没有看到您的代码示例

将getNumber()函数更改为以下定义。请注意,有许多不同的方法可以做到这一点。这只是一个例子

public void getNumber(){
    Scanner num = new Scanner(System.in);
    while(true) {
        System.out.print("Enter a decimal number: ");
        try {
           x = num.nextDouble();
           break;
       catch(InputMismatchException e) {}
    }
}

您已经注意到,如果输入不符合您的期望,您将收到一个InputMismatchException。记住这一点,您可以用try-catch块包围
x=num.nextDouble()
,并检查这种异常。例如:

while (true) {
    try {
        x = num.nextDouble();
        // move along if no exception is thrown
        break;
    } catch (InputMismatchException e) {
        // give the user an error message
        System.out.println("Type mismatch when reading your input. Please insert a double: ");
    }
}

顺便说一句,这与您的问题没有直接关系,但是您不应该将Scanner变量命名为
num
,因为这个名称不会让任何人想到Scanner-一般来说,人们会认为它是
int
或其他什么。给变量起适合它们的名称是一种很好的编程实践。

在while循环中捕获不匹配异常的可能重复。如果该值有效,则将循环的退出值设置为“true”,在异常捕获块中,将其设置为“false”…@MadProgrammer因为
Scanner
类提供了检查方法,而不必捕获异常,所以我更愿意这样做way@BackSlash因为要么处理扫描器异常,要么处理解析器异常,你还在处理异常…@我不是说异常。
Scanner
类提供了
hasNextDouble()
方法,可以使用该方法代替使用
try-catch
。如果(scanner.hasNextDouble())myDouble=scanner.nextDouble(),就可以使用
。No
try catch
此处OP已将值读取为双精度,最好捕获nextDouble引发的异常并将其控制在一个循环中是的,我没有看到代码。完全隔开了。上面的函数与您描述的完全一样。是的,您的方法没有问题,但是OP可能会忽略他们应该使用nextLine而不是NextDouble为什么我应该使用nextLine?上面的代码创建了一个无限循环。我遗漏了什么吗?如果对
num.nextDouble()
的调用没有引发异常,程序将到达
中断
,从而结束循环。除非用户一直插入非双精度,否则循环不会是无限的。我知道如果输入双精度,它不是无限循环,但如果我只在错误消息无限重复后输入一个字母。它不允许其他用户输入。