nextDouble() throws an InputMismatchException when I enter a double
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
精彩评论