Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/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 - Fatal编程技术网

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

Java 如何处理扫描仪中不正确的用户输入?,java,Java,我正在创建一个用于处理用户输入的类。这样,在其他项目中,我可以从类中调用方法,而不必担心在每个新项目中创建扫描程序 类中将有一个单独的方法来处理不同的变量类型(float、int、String等)。我从浮动类型开始: import java.util.Scanner; public class Input { public static float floatInput() { Scanner in1 = new Scanner(System.in); float in;

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

类中将有一个单独的方法来处理不同的变量类型(float、int、String等)。我从浮动类型开始:

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部分返回一个float。在本例中,它是一个零,因此当输入到计算器(例如)时,零会导致任何输出等于零

是否有一种返回“空”浮点值的方法来克服此问题

有没有人对处理不正确的扫描仪输入有更好的建议

多谢各位

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


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

没有“空”浮点。未初始化的浮点值默认为0.0f。如果要返回'in'变量,而不是在else语句中仅返回0,它将返回0.0


单击以了解有关Java中基本数据类型的默认值的详细信息。

您可以将输入读取为
字符串,然后检查它是否为浮点值,否则将循环,直到它变为浮点值或用户感到疲惫:

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:");
        }
    }
}

您可能希望在else分支中返回
floatInput()
,对吗?