我正在开发一个程序,该程序应该从文件中读取数字,不仅可以打印它们,还可以查找和报告平均值。但是,我一直遇到如下错误:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at FileRead.GetAvg(FileRead.java:36)
at FileRead.main(FileRead.java:18)
我是初学者,不确定到底出了什么问题。如果有人能够让我确切地知道我的错误是什么,或者如果我完全错误的话,就把我引向正确的方向,我们将不胜感激。我已经在这工作了好几天并且一直遇到错误。这是我的代码:
import java.util.*;
import java.io.*;
public class FileRead {
public static void main(String[] args) throws FileNotFoundException {
Scanner input = new Scanner(System.in);
System.out.println("Input filename (Be sure to add .txt):");
String filename = input.nextLine();
File inputFile = new File(filename);
Scanner reader = new Scanner(inputFile);
ReadFile(reader);
GetAvg(reader);
}
public static void ReadFile(Scanner reader) {
System.out.println("The numbers are: ");
double count = reader.nextDouble();
System.out.println(count);
while (reader.hasNextDouble()){
for (int i=0; i<count; i++);{
System.out.println(reader.nextDouble());
}
}
}
public static void GetAvg(Scanner reader) {
double count = 8;
double numbers = reader.nextDouble();
double sum = 0;
for(int i=0; i <=count ; i++)
sum = sum + numbers;
double average = sum / count;
System.out.println("Average is : " + average);
}
}
答案 0 :(得分:0)
Map
位于setsar=1
开始之前的文件末尾,因为reader
找到了它的结尾。 GetAvg
是在ReadFile
中初始化的对象,通过引用传递给reader
,以及传递给main
。通过引用传递意味着在ReadFile
完成后,GetAvg
对其状态所做的任何更改都将在main和其他任何内容中成立。
当ReadFile
调用ReadFile
时,main
使用了ReadFile(reader);
。通过文件的方式,直到它找到它的结束。
ReadFile
当读者在要处理的文件中没有更多数据时,返回false,允许循环终止并使用 while (reader.hasNextDouble()){
方法。
完成readFile
后,main将同一个读者对象传递到ReadFile
。 GetAvg
没有nextDouble
来获取,因为它已在GetAvg
期间到达文件的末尾
让我们说文件中的第一个数字是4.7 然后for循环将拉出并打印接下来的四个数字。它不会打印4.7
如果没有for循环,这行代码将打印4.7。然后循环将再次继续使用文件中找到的下一个双精度。
ReadFile
答案 1 :(得分:0)
问题是你将同一个扫描程序传递给ReadFile()和GetAvg()。看看this。到达GetAvg()时,您已经耗尽了扫描程序,因此,double numbers = reader.nextDouble();
会抛出错误,因为文件中的下一个双精度不存在。
快速修复可能是这样的:
File inputFile = new File(filename);
Scanner reader = new Scanner(inputFile);
ReadFile(reader);
Scanner reader = new Scanner(inputFile);
GetAvg(reader);
答案 2 :(得分:0)
函数ReadFile中的一些缺陷:
double count = reader.nextDouble();
这不会给你字符串/文字中浮点数的计数NoSuchElementException
,因为输入已经用尽,没有更多的。hasNext()
,如下所示(您已经在使用但我不认为循环对于您要实现的目标是必要的,而不是先使用确定计数。例如 - { {1}} Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
long aLong = sc.nextLong();
}
)