如何处理不正确的用户输入到扫描仪?

时间:2018-06-14 13:41:56

标签: java

我正在创建一个用于处理用户输入的类。这样,在其他项目中,我可以从类中调用方法,而不必担心在每个新项目中创建扫描程序。

类中将有一个单独的方法来处理不同的变量类型(float,int,String等..)。我已经开始使用float类型:

import java.util.Scanner;

public class Input {

public static float floatInput() {

    Scanner in1 = new Scanner(System.in);
    float in;

    if (in1.hasNextFloat()) {
        in = in1.nextFloat();
        return in;
    } else {
        System.out.print("Incorrect input type, try again");
        floatInput();
        return 0;
    }
}

这个方法很好用,除了它必须在else部分返回一个浮点数。在这种情况下它是零,所以当输入到计算器(例如)时,零会导致任何输出等于零。

有没有一种方法可以退回“空”。漂浮值来克服这个问题?

是否有人对处理错误的扫描仪输入提出了更好的建议?

谢谢。

3 个答案:

答案 0 :(得分:1)

您可以将您的输入读作String并检查它是否为浮点值,否则循环直到它或用户累了:

public static float floatInput() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Input a float:");
    for(;;){
        try{
            return Float.parseFloat(scanner.next());
        } catch(NumberFormatException e){
            System.out.println("Incorrect input type, try again:");
        }
    }
}

答案 1 :(得分:0)

public static float floatInput() {

    Scanner in1 = new Scanner(System.in);
    float in = in1.nextFloat();

    while (/*in.isGood()*/) {
        System.out.println("Incorrect input type, try again:");
        in = in1.nextFloat();
    }

    return in;
}

这将阻止在您打开扫描程序等待返回的情况下在后台运行该方法的实例时递归调用。

此外,您可以确定输出将具有nextFloat。

但是你需要找到一种更好的方法来检查float是否正确,例如带有解析的try catch块。 hasNextFloat()不会告诉你。

答案 2 :(得分:0)

没有'空'漂浮物这样的东西。尚未初始化的浮点默认为0.0f。如果你要返回'in'变量,而不是在else语句中返回0,它将返回0.0。

单击here以了解有关Java中原始数据类型的默认值的更多信息。