java.util.InputMismatchException by reading a doub

2019-09-01 15:00发布

I got the an java.util.InputMismatchException when I try to read 0.6 here is a part of the code. As you can see i try to reimplement a SkipList for a exercise sheet.

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        double f = scan.nextDouble();
        impl_with_errors list = new impl_with_errors(f);
        int n = scan.nextInt();


public class impl_with_errors {
    public static double chance;
    public Node list0;
    public Node list1;
    public Node list2;
    public Node list3;
/**
 * the constructor of the skiplist
 * @param p the chance that an element shall be in a higher list
 */
    public impl_with_errors(double p) {
        chance = p;
        list0 = null;
        list1 = null;
        list2 = null;
        list3 = null;
    }

3条回答
地球回转人心会变
2楼-- · 2019-09-01 15:32

Your code will work just try to modify these lines in the main method:

    Scanner scan = new Scanner(System.in);
    System.out.println("Enter the double value:\n");
    double f = scan.nextDouble();
    impl_with_errors list = new impl_with_errors(f);
    System.out.println("Enter the integer value:\n");
    int n = scan.nextInt();

It should work.

查看更多
我想做一个坏孩纸
3楼-- · 2019-09-01 15:42

Use a comma as decimal sperator, not a dot. 0,6 works

Format the double value with a DecimalFormat df = new DecimalFormat("#,#");

查看更多
SAY GOODBYE
4楼-- · 2019-09-01 15:53

From the docs:

public double nextDouble()

Scans the next token of the input as a double. This method will throw InputMismatchException if the next token cannot be translated into a valid double value. If the translation is successful, the scanner advances past the input that matched.

Parsing 0.6 should work, but if you want to enter 0,6 you can use this:

String dstr = scan.nextLine();

dstr = dstr.replace(",", ".");

double f = Double.parseDouble(dstr);
查看更多
登录 后发表回答