如何循环错误的数据类型输入?



我知道有很多类似的问题,但我不能理解它的大部分,也我不能看到任何类似的问题有关java语言。如果输入不是双数据类型,你们能告诉我如何循环这个问题吗?代码:

System.out.println("Enter first number");
num1 = input.nextDouble();

System.out.println("Enter second number");
num2 = input.nextDouble();   
我真的很感谢任何试图回答的人,tia!!

这是一个解决方案(没有异常处理)。它循环直到输入两个double。所以可以这样输入:

3
4.2

或者:

www
3
abc
4.2

都将给出相同的结果

3
4.2

请注意,对于您在命令提示符下输入的数字,代码是地区敏感的(这意味着小数点取决于您的计算机设置-例如,在德国,它是逗号而不是点,因此您将输入4,2):

Scanner scanner = new Scanner(System.in);
Double part1 = null;
Double part2 = null;
while (true) {
if (scanner.hasNextDouble()) {
if (part1 == null ) {
part1 = scanner.nextDouble();
} else {
part2 = scanner.nextDouble();
break;
}
} else {
scanner.next();   // The input is not a Double, so just drop it
}
}
scanner.close();
System.out.println(part1);
System.out.println(part2);

如果在创建扫描器后添加scanner. uselocale (Locale.ROOT)行:

Scanner scanner = new Scanner(System.in);
scanner.useLocale(Locale.ROOT);

的小数点将是点'。

我喜欢创建一个单独的方法来验证输入。如果该值无效,则该方法返回-1。然后我将有一个while循环来检查输入是否为-1,如果是,那么它将要求一个新的输入值,直到它是正确的。有很多方法可以做到这一点。但要点是这样的。

public static void main(String[] Args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter first number");
double num1 = validateDouble(input);
while (num1 == -1) {
num1 = validateDouble(input);
}
System.out.println(num1);
}

private static double validateDouble(Scanner scanner) {
String input = scanner.nextLine();
try {
double i = Double.parseDouble(input);;
return i;
}catch (InputMismatchException | NumberFormatException e) {
if (input.equals("q")) {
System.exit(0);
}
System.out.println("Please try again.");
return -1;
}
}

最新更新