开发者

nextDouble() throws an InputMismatchException when I enter a double

开发者 https://www.devze.com 2023-03-04 16:42 出处:网络
import java.util.*; class Averager { public static double unlimited() { int count = 0; double sum = 0; Scanner scan = new Scanner(System.in);
import java.util.*;

class Averager
{
    public static double unlimited()
    {
        int count = 0;
        double sum = 0;
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext())
        {
            double d = sca开发者_运维技巧n.nextDouble();
            sum += d;
            count++;
        }
        double ave = sum/count;
        return ave;
    }

    public static void main(String[] args) {
        System.out.println(unlimited()+"\n");
    }
}

There is no error when I use integers but if I use numbers with point in it a error appears.

$ javac Averager.java; java Averager
0.5
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextDouble(Scanner.java:2387)
    at Averager.unlimited(Averager.java:12)
    at Averager.main(Averager.java:21)

To my best understanding 0.5 should be covered by double. If not please can someone correct me.


It might be locale dependent. Decimal numbers are e.g written as 0,5 in Sweden.

Change your code so that it says e.g.:

Scanner scan = new Scanner(System.in);
scan.useLocale(Locale.US);


This worked for me, changing the locale did not.

  Scanner sc = new Scanner(System.in);
  // val = sc.nextDouble(); - crashes with java.util.NoSuchElementException
  // If Java crashes with legal Java code, wrap the call in a hasNextLine() test
  if (sc.hasNextLine())
  {
    val = sc.nextDouble();
  }

java.util.NoSuchElementException: No line found

0

精彩评论

暂无评论...
验证码 换一张
取 消