【问题标题】:Scanner.nextDouble : txt file correctly loaded but "InputMismatchException" occursScanner.nextDouble : txt 文件正确加载但出现“InputMismatchException”
【发布时间】:2012-05-31 09:50:13
【问题描述】:

我有一个文本 (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() 时,会出现“未捕获”(java.util.InputMismatchException) 异常。

我做错了什么?

感谢您的任何提示。

【问题讨论】:

  • 打印 sc.next() 并查看扫描仪尝试将什么解析为双精度。
  • 我试过了。实际上,在 4 次迭代中,它采用了第一行的三个数字和第四行的第一个数字,所以应该是这样,但是当我尝试使用 nextDouble() 进行相同操作时,它在第一次迭代中失败

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


【解决方案1】:

你正在解析 doubles 是否与 Locale 相关?

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

此类的一个实例能够扫描标准格式以及扫描仪区域设置格式的数字。扫描仪的初始语言环境是Locale.getDefault() 方法返回的值;它可以通过useLocale(java.util.Locale) 方法进行更改。

因此,例如,这可能会有所帮助:

scanner.useLocale(Locale.ENGLISH);

【讨论】:

    【解决方案2】:

    如果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);
    }
    

    【讨论】:

    • 但是 next() 只返回一行的一个(三个中的一个)双精度。它说拆分(或拆分)方法不存在
    • 好吧,如果它一次返回三个双打之一,那么您不必拆分它们,只需解析它们并使用它们。
    • 好的,我的索引有些问题,但现在可以了。谢谢!
    【解决方案3】:

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

    1,0 1,2 2
    
    0,9 1,0 10
    
    50,4 9,2 20
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多