线程" main"中的例外情况java.util.InputMismatchException。扫描仪级

时间:2017-11-15 16:17:22

标签: java

我已经查看了一些问题,但我似乎无法找到任何好的解决方案。

我有一个非常简单的代码,它只是不起作用。它应该得到用户的体重和身高,然后计算BMI。

我每次投入的价值都不同。 但是让我们说变量vikt为85,变量langd为1.80。 当我使用a而不是a时,它确实有效。虽然。 我收到以下错误。

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("");


    }

}

4 个答案:

答案 0 :(得分:1)

在三种情况下可能发生错误

1)您可能提供了错误的输入格式(而不是双倍)。尝试以双重输入

2)您可能需要将useLocale与扫描仪类

一起使用
try-catch

3)您也可以使用try { // ...Your code } catch (InputMismatchException ime) { obj.next(); } 来处理错误

package.json

答案 1 :(得分:1)

输入不匹配异常是因为您的输入与预期输入的类型不同。您可以放置​​while循环并检查输入hasNextDouble()是否始终有效:

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("");




    }

答案 2 :(得分:0)

原因您收到错误[例外]

当您需要输入Double,int并输入String时,会发生此异常并停止您的程序。 您可以使用一个Scanner获得输入,只有您可以再次重复使用一个Scanner,而无需再创建Scanner的另一个对象。就像我使用的那样

注意 由于初学者级别而未解释异常处理。如果问题随时可以提出,我建议您先自己学习。 Code i run

示例当我收到InputMismatchException

当我收到与您相同的错误时的情况。

InputMismatchException

答案 3 :(得分:0)

好像你输入的不是数字。当您使用 nextDouble 时,这意味着您只能输入数字,而不是字符串。我希望这会有所帮助。您可以使用try-catch以避免错误。