“线程中的异常”;“主要”;java.util.InputMismatchException。扫描器类
我已经看了一些问题,但似乎找不到任何好的解决办法 我有一个非常简单的代码,就是无法工作。它应该得到用户的体重和身高,然后计算BMI 每次我输入的值都不一样。 但假设变量vikt为85,变量langd为1.80。 当我使用a而不是a时,它确实起作用。不过。 我得到以下错误“线程中的异常”;“主要”;java.util.InputMismatchException。扫描器类,java,Java,我已经看了一些问题,但似乎找不到任何好的解决办法 我有一个非常简单的代码,就是无法工作。它应该得到用户的体重和身高,然后计算BMI 每次我输入的值都不一样。 但假设变量vikt为85,变量langd为1.80。 当我使用a而不是a时,它确实起作用。不过。 我得到以下错误 Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864)
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at Labb2.BMI.main(BMI.java:32)
C:\Users\Danne\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 5 seconds)
我使用的代码如下:
package Labb2;
import java.util.Scanner;
public class BMI {
public static void main(String[] args) {
Scanner viktObj = new Scanner(System.in);
Scanner langdObj = new Scanner(System.in);
double vikt;
double langd;
double bmi;
System.out.print("Ange din vikt: ");
vikt = viktObj.nextDouble();
System.out.print("Ange din längd i meter (ex. 1.70): ");
langd = langdObj.nextDouble();
bmi = vikt / (langd * langd);
System.out.printf("Ditt BMI är: %.2f", bmi);
System.out.println("");
}
}
错误可能发生在三种情况下 1) 您可能给出了错误的输入格式(而不是双精度)。尽量用双精度输入 2) 您可能需要将useLocale与scanner类一起使用
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
3) 您还可以使用try catch
通过
try {
// ...Your code
} catch (InputMismatchException ime) {
obj.next();
}
输入不匹配异常是因为您的输入与预期输入的类型不同。您可以将while循环放入并检查输入
是否具有nextdouble()
,以使其始终工作:
public static void main(String[] args) {
// TODO code application logic here
Scanner viktObj = new Scanner(System.in);
double vikt;
double langd;
double bmi;
System.out.print("Ange din vikt: ");
while(!viktObj.hasNextDouble()){
System.out.println("Wrong input... please enter again!");
viktObj.next();
}
vikt = viktObj.nextDouble();
System.out.print("Ange din längd i meter (ex. 1.70): ");
while(!viktObj.hasNextDouble()){
System.out.println("Wrong input... please enter again!");
viktObj.next();
}
langd = viktObj.nextDouble();
bmi = vikt / (langd * langd);
System.out.printf("Ditt BMI är: %.2f", bmi);
System.out.println("");
}
出现错误的原因[异常]: 当需要输入Double、int和String thn时,会发生此异常并停止程序。 您可以使用一个
扫描仪
获取输入,但您可以反复使用一个扫描仪
,无需再制作另一个扫描仪的对象
注意
由于初学者级别,未解释异常处理。如果有问题可以问的话,我建议先自己学习。
获取输入不匹配异常时的示例
当我和你一样犯同样的错误时
看起来您输入的不是数字。当您使用nextDouble时,这意味着您只能输入数字,而不能输入字符串。我希望这能有所帮助。您可以使用try-catch来避免错误。它适合我。你提供了什么价值观?顺便说一句,你不需要两个扫描仪。使用其中一个从控制台读取所有数据。首先,您不需要两个单独的扫描仪对象来读取用户的输入,一个就足够了。您收到的错误是因为您输入的数字不是双精度值。请发布并显示导致此异常的输入数据。这可能是区域设置问题吗?我的意思是,你正在使用。还是小数点?您的输入是什么样子的?当我使用a而不是a时,我的代码会工作。实际上。。为什么会这样?