java中的文件类和数组

java中的文件类和数组,java,arrays,java.util.scanner,java-io,Java,Arrays,Java.util.scanner,Java Io,我在编写Java程序时被卡住了。我必须计算121名学生的成绩,并将其存储在一个数组中以供以后使用。但是我创建的数组没有for循环中的值 public class GradeCalculator{ public static void main(String[] args){ File grade = fileName(); int lines = getNumEntries(grade); print(grade, lines);

我在编写Java程序时被卡住了。我必须计算121名学生的成绩,并将其存储在一个数组中以供以后使用。但是我创建的数组没有for循环中的值

public class GradeCalculator{

    public static void main(String[] args){
        File grade = fileName();
        int lines = getNumEntries(grade);
        print(grade, lines);
    }
    public static File fileName(){
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the name of the grade file");
        String fileName = scan.nextLine();
        File file = new File(fileName);
        while(!file.exists()){
            System.out.println("your input file does not exist");
            fileName = scan.nextLine();
            file = new File(fileName);
        }return file;       
    }

    public static int getNumEntries(File fln){
        File file = fln;
        int count = 0;
        try{
            Scanner input = new Scanner (fln);
            while(input.hasNextLine()){
                count++;
                input.nextLine();
            }
        }catch(FileNotFoundException e) {
            System.out.println("File not found");
            System.exit(0);
        }return count;  
    }

    public static void print(File fln, int values)throws NoSuchElementException{
        File file = fln;
        int []a = new int [values];
        try{
            Scanner input = new Scanner(file);
            for(int i=0; i<=a.length; i++){
                while(input.hasNextDouble()){
                    double Lab = input.nextDouble();
                    double A1 = input.nextDouble()/10*4;
                    double A2 = input.nextDouble()/10*4;
                    double A3 = input.nextDouble()/10*4;
                    double A4 = input.nextDouble()/10*4;
                    double A5 = input.nextDouble()/10*4;
                    double A6 = input.nextDouble()/10*4;
                    double A7 = input.nextDouble()/10*4;
                    double Midterm1 = input.nextDouble()/20*15;
                    double Midterm2 = input.nextDouble()/35*15;
                    double Final = input.nextDouble()/110*37;
                    a[i]= (int)(Lab+A1+A2+A3+A4+A5+A6+A7+Midterm1+Midterm2+Final);
                    System.out.println(a[i]); //If I put the println here the values are correct
                }
            }
        }catch(FileNotFoundException e){
            System.out.println("File not found");
        }System.out.println(a[i]); //If I put the println here the values are different
    }
}
公共类等级计算器{
公共静态void main(字符串[]args){
文件等级=文件名();
int lines=getNumEntries(等级);
打印(级别、行);
}
公共静态文件名(){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入成绩文件的名称”);
字符串文件名=scan.nextLine();
文件=新文件(文件名);
而(!file.exists()){
System.out.println(“您的输入文件不存在”);
fileName=scan.nextLine();
文件=新文件(文件名);
}返回文件;
}
公共静态int getnumeries(文件fln){
File=fln;
整数计数=0;
试一试{
扫描仪输入=新扫描仪(fln);
while(input.hasNextLine()){
计数++;
input.nextLine();
}
}catch(filenotfounde异常){
System.out.println(“未找到文件”);
系统出口(0);
}返回计数;
}
公共静态无效打印(文件fln,int值)引发NoTouchElementException{
File=fln;
int[]a=新的int[值];
试一试{
扫描仪输入=新扫描仪(文件);

for(int i=0;i在外部for循环的第一次迭代中,您消耗了内部while循环中的所有输入。此外,您反复将
a[0]
设置为等级,而不是数组中可能的每个索引。然后,for循环完成,您有一个如下数组:

{lastGrade, 0, 0, 0, ..., 0}

基本上,您需要去掉while循环。可能还有其他问题。

如果我去掉while循环,它在java.util.Scanner.throwFor(未知源)在java.util.Scanner.nextDouble(未知源)在java.util.Scanner.nextDouble(未知源)在java.util.Scanner.nextDouble显示“线程中的异常”main“java.util.NoSuchElementException”在GradeCalculator.print(GradeCalculator.java:47)在GradeCalculator.main(GradeCalculator.java:10)“我必须重复这个过程121次,我想知道如果我想将值存储在数组中,我应该添加什么