我是java的新手,我有一个项目来创建一个程序,该程序读取包含数字列表的文件并计算它们。我想在读取文件后创建一个数组,但似乎无法使用我在makeArray方法中创建的数组'scores []'。有人可以告诉我如何解决这个错误?我相信它与范围有关,我无法弄明白。此外,我知道列表可以工作而不是数组,但我不能使用这个项目。谢谢! 附:抱歉,如果我的代码很难看
import java.io.*;
import java.util.*;
class GradeFiles {
public static void main(String[] args)
throws FileNotFoundException {
Scanner console = new Scanner(System.in);
Scanner input = promptUser(console);
for(int i = 0; i<= scores.length-1; i++) {
double[] printArray = scores[i];
System.out.print(printArray);
}
}
public static Scanner promptUser(Scanner console)
throws FileNotFoundException {
Scanner isThere = null;
while(isThere == null) {
System.out.print("Enter name of file: ");
String fileName = console.next();
try {
isThere = new Scanner(new File(fileName));
} catch (FileNotFoundException e) {
System.out.print("File Not Found. ");
}
}
System.out.print("");
return isThere;
}
public static double[] makeArray(Scanner input) {
int length = 0;
while(input.hasNext()) {
double a = input.nextDouble();
length++;
}
double[] scores = new double[length-1];
while(input.hasNext()) {
for(int i = 0; i <= length - 1; i++) {
double num = input.nextDouble();
scores[i] = num;
}
}
return scores;
}
}
答案 0 :(得分:1)
您将转到文件的末尾,以尝试查找需要存储的双值的数量,以便您可以决定数组的长度。所以当你再次使用时 input.hasNext();它返回null,因为你已经在文件的末尾。
如果您不确定要阅读的数量,可以使用arrayList读取数字。如果你想要,你可以将它转换回数组
public static double[] makeArray(Scanner input) {
int length = 0;
ArrayList<Double> list = new ArrayList<Double>();
while(input.hasNext()) {
list.add(input.nextDouble());
}
double[] scores = new double[list.size()];
int i = 0;
for (double e : list)
scores[i++] = e;
return scores;
}
答案 1 :(得分:0)
makeArray
将始终返回一个空数组。扫描input.hasNext()
后,您已经消耗了所有输入。第二个while循环将立即退出,因为没有更多输入。
答案 2 :(得分:0)
查看您编写的makeArray方法。在第一个循环中,您将扫描仪指针前进到文件的末尾。
如果你试图读取其他数据,那就不会再有了(next())。
最简单的解决方案是在完成第一个循环后重建扫描程序,将其传递给同一个文件。