Java Android NoSuchElementException和Scanner
我正在尝试从原始文件夹中读取一个txt文件,为我的应用程序创建一个整数数组。 txt每行都有编号,如下所示: test.txtJava Android NoSuchElementException和Scanner,java,android,parsing,java.util.scanner,Java,Android,Parsing,Java.util.scanner,我正在尝试从原始文件夹中读取一个txt文件,为我的应用程序创建一个整数数组。 txt每行都有编号,如下所示: test.txt 1 3 4 5 6 2 -9 ... 我的数组是这样的Integer[]vector={1,2,3,4,5,6,2,-9,…} 我正在删除的代码(实际上在单击回调方法中): 但是,在调试模式下,将断点放在直线上时: 22 vector.add(Integer.parseInt(sc.nextLine()) 我可以在每一个迭代中看到向量变量,但当它填充完毕时,我的活动就
1
3
4
5
6
2
-9
...
我的数组是这样的Integer[]vector={1,2,3,4,5,6,2,-9,…}
我正在删除的代码(实际上在单击回调方法中):
但是,在调试模式下,将断点放在直线上时:
22 vector.add(Integer.parseInt(sc.nextLine())
我可以在每一个迭代中看到向量变量,但当它填充完毕时,我的活动就会停止
我就是不明白出了什么问题,这就是为什么我要寻求帮助
提前谢谢你 在
while
循环之后,sc
不再包含行(因此循环退出)
以后你有
Log.d("clicked" , sc.nextLine());
这会尝试获取另一行(不再存在),导致错误:
E/AndroidRuntime(19925): Caused by: java.util.NoSuchElementException
E/AndroidRuntime(19925): at java.util.Scanner.nextLine(Scanner.java:1417)
E/AndroidRuntime(19925): at com.soulmagnet.speakerparametrix2.PlotInfBaffle.plotSPLinfBaffle(PlotInfBaffle.java:136)
(在完整的错误日志中有些隐藏)
所以,删除该行,它应该可以正常工作。您在日志中看到“单击”了吗
如果可以,在打印日志之前,一切都很好
日志中有趣的部分
14:04:35.619:E/AndroidRuntime(19925):。。。11更多02-21 14:04:35.619:
E/AndroidRuntime(19925):由以下原因引起:java.util.NoSuchElementException
02-21 14:04:35.619:E/AndroidRuntime(19925):在
java.util.Scanner.nextLine(Scanner.java:1417)02-21 14:04:35.619:
E/AndroidRuntime(19925):在
com.soulmagnet.speakerparametrix2.plotinff挡板.plotSPLinfBaffle(plotinff挡板.java:136)
02-21 14:04:35.619:E/AndroidRuntime(19925):。。。14多
的文档说明,当没有新行时将引发此异常
这是你的问题
Log.d("clicked" , sc.nextLine());
仔细查看stacktrace和
Scanner.nextLine()
方法的文档
您正在吃掉此循环中输入文件中的所有行:
while (sc.hasNext()) {
vector.add(Integer.parseInt(sc.nextLine()));
}
然而,在这一行:
Log.d("clicked" , sc.nextLine());
对已结束的输入调用nextLine()
。根据Scanner.nextLine()
的文档:
抛出:
NoTouchElementException-如果未找到行
此调用导致
扫描仪
抛出NoTouchElementException
。只需删除Log.d()
行,或者记住循环中的最后一个元素,然后将其值记录到LogCat(如果您有意的话)。我不是100%确定,但问题在于行Log.d(“单击”,sc.nextLine())
…即使没有数据,它也会调用nextLine()
函数。谢谢!Log.d()本应该帮助我监视代码,这是多么讽刺啊。愚蠢和感激我觉得。。。!!我很高兴你解决了这个问题。要拥抱此刻的感觉(为了好玩),请阅读:注意:这个术语不适用于你的情况,但具有类似数量的生活讽刺;)真实的故事!感觉被拥抱了!
while (sc.hasNext()) {
vector.add(Integer.parseInt(sc.nextLine()));
}
Log.d("clicked" , sc.nextLine());