确保用户输入是双倍的?

时间:2014-10-14 19:42:07

标签: java user-input

使用扫描仪时,有没有办法检查用户输入是否符合预期?

说我想要一个双精度但用户输入一个String我该怎么做才能提示用户重新输入一个双倍的值?

如果未输入数字,则使用以下代码,我会收到mismatchException。如果输入错误,我不希望程序崩溃。

这是我的代码:     import 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);
  }

}

2 个答案:

答案 0 :(得分:1)

您可以将其包装在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) {}
    }
}

答案 1 :(得分:0)

您已经注意到,如果他们没有输入您期望的内容,则会收到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,因为该名称不会让任何人想到扫描仪 - 人们通常会认为它是int或其他东西。给出适合它们的变量名称是一种很好的编程习惯。