gpt4 book ai didi

线程 “main” java.util.NoSuchElementException 中的 Java 异常 - 使用扫描仪读取文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:55 24 4
gpt4 key购买 nike

我已经搜索了有关该主题的各种主题,但找不到任何处于相同情况的人或到目前为止我可以使用的任何解决方案。

我只想读取以下格式的txt文件: double 0 double 0 Int0双1 双1 Int1..达布林达布林国际酒店

这是我的代码:

public void readDatabase(String s) throws FileNotFoundException{    
try {
BufferedReader br = new BufferedReader(new FileReader(s));
String line = br.readLine();
Scanner trainFile = null;
while (line != null) {
line.trim();
trainFile = new Scanner(line);
double x = trainFile.nextDouble();
double y = trainFile.nextDouble();
int type = trainFile.nextInt();
this.database.add(new Point(x,y,type));
line = br.readLine();
}
trainFile.close();
br.close();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}

有趣的是,这个函数工作了一段时间,但是当我用更多数据填充 txt 文件时,它就停止工作了。我还检查了文件是否有最终错误,但一切都很好。根据我的堆栈跟踪,该错误出现在第一次 NextDouble() 调用时。有人有想法吗?

更新:

这是正在运行的文件类型:

0,6580097206539348  0,36101701387184226 2
0,9529350156283241 0,7383387609711926 2
0,6580097206539348 0,36101701387184226 2
0,9529350156283241 0,7383387609711926 2
0,6580097206539348 0,36101701387184226 2
0,48639272096486486 0,4378985495387871 1

但是如果我添加一些像这样的额外行,它就会停止工作:

0,6580097206539348  0,36101701387184226 2
0,9529350156283241 0,7383387609711926 2
0,6580097206539348 0,36101701387184226 2
0,9529350156283241 0,7383387609711926 2
0,6580097206539348 0,36101701387184226 2
0,48639272096486486 0,4378985495387871 1
0,8632344357711337 0,5253407956535258 1
0,7351912765040557 0,8295830810436339 1
0,6369155743204543 0,2757349130759706 1
0,46512947234632146 0,4388586141249502 1
0,8677892876429869 0,599451235810409 1
0,8827084731154641 0,55652107505414 1

最佳答案

According to JavaDoc 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.

因此,这里 Scanner 无法在您的行 0,6580097206539348 0,36101701387184226 2 中找到 Double。有一种解决方案是在循环期间将 , 替换为 .(仅当您的每一行不包含除此目的以外的逗号时)

例如

  String yourLine="0,6580097206539348  0,36101701387184226 2"
Scanner trainFile = new Scanner(line.replace(',', '.'));
double x = trainFile.nextDouble();
double y = trainFile.nextDouble();
int type = trainFile.nextInt();
<小时/>

此外,为了避免Exception,您可以使用hasNextDoubel()hasNextInt()方法让Scanner检查数据中是否存在double/int,它返回true/false。您可以在#Scanner阅读更多相关信息。

关于线程 “main” java.util.NoSuchElementException 中的 Java 异常 - 使用扫描仪读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24297688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com