Java 如何处理扫描仪中不正确的用户输入?
我正在创建一个用于处理用户输入的类。这样,在其他项目中,我可以从类中调用方法,而不必担心在每个新项目中创建扫描程序 类中将有一个单独的方法来处理不同的变量类型(float、int、String等)。我从浮动类型开始: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;
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()
,对吗?