我对java相当陌生,我有一个项目来制作一个程序,读取包含数字列表的文件并计算它们。我想在读取文件后创建一个数组,但似乎无法使用我在makeArray方法中创建的数组"scores[]"。有人能告诉我如何纠正这个错误吗?我相信这和范围有关,我就是想不通。此外,我知道列表可以代替数组,但我不能在这个项目中使用。谢谢P.S.对不起,如果我的代码难看
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;
}
}
您将走到文件的末尾,试图找到需要存储的双值数量,以便确定数组的长度。所以当你再次使用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;
}
看看您编写的makeArray方法。在第一个循环中,将scanner指针移到文件的末尾。
奇怪的是,如果你试图读取额外的数据,就不会有更多的数据了(next())。
最简单的解决方案是重建扫描仪,在完成第一个循环后将相同的文件传递给它。
makeArray
将始终返回一个空数组。扫描完input.hasNext()
之后,您已经消耗了所有输入。第二个while循环将立即退出,因为没有更多的输入。