Scanner.nextDouble:正确加载了txt文件但发生了“InputMismatchException”

时间:2012-05-31 09:50:13

标签: java java.util.scanner uncaught-exception

我有一个文本(file.txt)文件。此文件已加载到扫描仪内。

在文件中有各种行,每行有两个双精度数和一个整数值除以空格。

像这样:

1.0 1.2 2
0.9 1.0 10
50.4 9.2 20

我需要完成三个阵列。

每个数组对应一个。类似的东西:

double[] x = {1.0,0.9,50.4}
double[] y = {1.2,1.0,9.2}
double[] z = {2,10,20}

我尝试使用此代码:

double x[]= new double [3];
double y[]= new double [3];
double z[]= new double [3];

File f = new File(ClassLoader.getSystemResource(file.txt).toURI());
Scanner sc = new Scanner(f);

for (int i=0;j<3;i++){
  x[i] = sc.nextDouble();
  y[i] = sc.nextDouble();
  z[i] = sc.nextDouble();
}

但是当第一个nextDouble()执行“uncaught”(java.util.InputMismatchException)异常时。

我做错了什么?

感谢您的任何提示。

3 个答案:

答案 0 :(得分:3)

是否与您正在解析Locale的{​​{1}}相关?

来自http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

的引文
  

此类的实例能够扫描标准格式的数字以及扫描程序语言环境的格式。扫描程序的初始语言环境是doubles方法返回的值;它可以通过Locale.getDefault()方法更改。

因此,举例来说,这可能有所帮助:

useLocale(java.util.Locale)

答案 1 :(得分:1)

如果sc.next()适用于您,则需要解析输出,因为它的类型为String,因此需要InputMismatchException

尝试:

for (int i=0;j<3;i++) {
  String s;
  s = sc.next();
  x[i] = Double.parseDouble(s);
  s = sc.next();
  y[i] = Double.parseDouble(s);
  s = sc.next();
  z[i] = Double.parseDouble(s);
}

答案 2 :(得分:0)

执行程序时,请尝试使用逗号而不是点:

1,0 1,2 2

0,9 1,0 10

50,4 9,2 20