如何从Java中包含数字的文件生成数组?

如何从Java中包含数字的文件生成数组?,java,arrays,file,scope,project,Java,Arrays,File,Scope,Project,我对java相当陌生,我有一个项目要做一个程序,读取一个包含数字列表的文件并计算它们。我想在读取文件后创建一个数组,但似乎无法使用我在makeArray方法中创建的数组“scores[]”。有人能告诉我如何修复这个错误吗?我认为这与范围有关,我就是搞不懂。另外,我知道列表可以代替数组工作,但我不能在这个项目中使用。谢谢 另外,如果我的代码很丑,我很抱歉 import java.io.*; import java.util.*; class GradeFiles { public stat

我对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;
}   

}
import java.io.*;
导入java.util.*;
类文件{
公共静态void main(字符串[]args)
抛出FileNotFoundException{
扫描仪控制台=新扫描仪(System.in);
扫描仪输入=提示用户(控制台);

for(int i=0;i
makeArray
将始终返回一个空数组
您已消耗了所有输入。第二个while循环将立即退出,因为没有更多输入。

makeArray
将始终返回空数组。扫描
输入后。hasNext()
您已消耗了所有输入。第二个while循环将立即退出,因为没有更多输入。

查看您编写的makeArray方法。在第一个循环中,您将扫描仪指针前进到文件末尾

当然,如果您尝试读取其他数据,则不会再有(next())


最简单的解决方案是,在完成第一个循环后,通过相同的文件重建扫描仪。

查看您编写的makeArray方法。在第一个循环中,将扫描仪指针前进到文件的末尾

当然,如果您尝试读取其他数据,则不会再有(next())


最简单的解决方案是,在完成第一个循环后通过相同的文件重建扫描仪。

您将转到文件的末尾,试图找到需要存储的双倍值的数量,以便确定数组的长度。因此,当您再次使用 input.hasNext();它返回null,因为您已经在文件末尾

如果您不确定需要读取多少,可以使用arrayList读取数字。如果需要,可以将其转换回array

 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;
publicstaticdouble[]makeArray(扫描仪输入){
整数长度=0;
ArrayList=新建ArrayList();
while(input.hasNext()){
list.add(input.nextDouble());
}
double[]分数=新的double[list.size()];
int i=0;
用于(双e:列表)
分数[i++]=e;
返回分数;

}

您将在文件末尾尝试查找需要存储的双倍值的数量,以便确定数组的长度。因此,当您再次使用 input.hasNext();它返回null,因为您已经在文件末尾

如果您不确定需要读取多少,可以使用arrayList读取数字。如果需要,可以将其转换回array

 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;
publicstaticdouble[]makeArray(扫描仪输入){
整数长度=0;
ArrayList=新建ArrayList();
while(input.hasNext()){
list.add(input.nextDouble());
}
double[]分数=新的double[list.size()];
int i=0;
用于(双e:列表)
分数[i++]=e;
返回分数;

}

好吧,你的错误到底是什么?好吧,你的错误到底是什么?谢谢!只有一个问题:我在哪里重建这个扫描仪?在makeArray方法中还是在我的程序的早期?你应该在开始第二个循环之前重建它。我会将文件路径保存为静态变量,并创建一个新的扫描仪(filepath)在循环开始之前谢谢!只有一个问题:我在哪里重建这个扫描仪?在makeArray方法中还是在我的程序的早期?你应该在开始第二个循环之前重建它。我会将文件路径保存为静态变量,并在循环开始之前创建一个新的扫描仪(filepath)