Java 插入时已到达文件结尾

Java 插入时已到达文件结尾,java,parsing,Java,Parsing,因此,我正在为我的java类编写这个程序,并记录了所有内容,除了错误“解析时到达文件末尾”,如果有人能帮助我了解一些情况,将对我大有帮助 * COMMENTS: This java program outputs students names and test scores then outputs in order based on their grade. */ import java.io.*; import java.util.*; public class lab13

因此,我正在为我的java类编写这个程序,并记录了所有内容,除了错误“解析时到达文件末尾”,如果有人能帮助我了解一些情况,将对我大有帮助

  * COMMENTS: This java program outputs students names and test scores then outputs in order based on their grade.
  */
  import java.io.*;
  import java.util.*;

public class lab13
{
  public static void main(String[] args)throws FileNotFoundException, IOException
   { 
      String Last[]= new String[20];
      String First[] = new String[20];
      String inputLine="";;
      int score[]=new int[20];
      int i = 0;
      int total =0;
      String grade = "A";

   //Create a FileReader object to associate the file student.txt
   FileReader fr = new FileReader("student.txt"); //The file student.txt is located in the same folder that has the file lab13. Create a
   BufferedReader br = new BufferedReader(fr); //Load the file student.txt into the buffer (RAM)
   while((inputLine = br.readLine()) != null) //Read data from the file
   {
   Last[i] = inputLine;
   First[i] = br.readLine();
   score[i] = Integer.parseInt(br.readLine());
   i++;
   }//end while loop

   //Determine the grade and also display the students' names followed by their test scores and grades.
   for(i =0; i < 20; i++)
   {if( score[i]>= 90)
   grade = "A";
   //YOUR CODING TO DISPLAY GRADE "B", "C", "D", and "F'.
   for(i =0; i < 20; i++)
   {if( score[i]>= 80)
   grade = "B";
   for(i =0; i < 20; i++)
   {if( score[i]>= 70)
   grade = "C";
   for(i =0; i < 20; i++)
   {if( score[i]>= 60)
   grade = "D";
   for(i =0; i < 20; i++)
   {if( score[i]<= 59)
   grade = "F";


   }

   //Determine the highest score
   int highest = score[0];
   for(i = 1; i<20;i++)
   { if (score[i] > highest)
   highest = score[i];
   }
   //Determine the lowest score.
   //YOUR CODING
   int lowest = score[0];
   for(i = 1; i<20;i++)
   { if (score[i] > lowest)
   lowest = score[i];
   }



   //Determine the average
   //YOUR CODING
   int average = score[0];
   for(i = 1; i<20;i++)
   { if (score[i] > average)
   average = score[i];
   }


   //Display the highest score, lowest score and average.

   //YOUR CODING
   System.out.print("Highest Score:"+ highest);
   System.out.print("Lowest Score:"+ lowest);
   System.out.print("Average Score:"+ average);





System.exit(0);
   }
}
*注释:此java程序输出学生姓名和考试成绩,然后根据成绩按顺序输出。
*/
导入java.io.*;
导入java.util.*;
公共类lab13
{
公共静态void main(字符串[]args)抛出FileNotFoundException、IOException
{ 
字符串Last[]=新字符串[20];
第一个字符串[]=新字符串[20];
字符串inputLine=“”;;
整数分数[]=新整数[20];
int i=0;
int-total=0;
字符串grade=“A”;
//创建FileReader对象以关联文件student.txt
FileReader fr=new FileReader(“student.txt”);//文件student.txt位于与文件lab13相同的文件夹中。创建一个
BufferedReader br=new BufferedReader(fr);//将文件student.txt加载到缓冲区(RAM)
while((inputLine=br.readLine())!=null)//从文件中读取数据
{
最后[i]=输入线;
第一[i]=br.readLine();
score[i]=Integer.parseInt(br.readLine());
i++;
}//边结束边循环
//确定成绩,并显示学生的姓名,后跟他们的考试成绩和成绩。
对于(i=0;i<20;i++)
{如果(分数[i]>=90)
等级=“A”;
//您的编码显示等级“B”、“C”、“D”和“F”。
对于(i=0;i<20;i++)
{如果(分数[i]>=80)
等级=“B”;
对于(i=0;i<20;i++)
{如果(分数[i]>=70)
等级=“C”;
对于(i=0;i<20;i++)
{如果(分数[i]>=60)
职系=“D”;
对于(i=0;i<20;i++)
{if(score[i]问题在于:

while((inputLine = br.readLine()) != null) //Read data from the file
{
    Last[i] = inputLine;
    First[i] = br.readLine();
    score[i] = Integer.parseInt(br.readLine());
    i++;
}
您在同一循环中调用了三次
br.readLine()
,这意味着只有当您正在读取的文件中有三行的倍数时,您的代码才会工作。因此,这将起作用:

Line 1 //inputLine = br.readLine()) != null
Line 2 //First[i] = br.readLine();
Line 3 //score[i] = Integer.parseInt(br.readLine());
Line 4 //inputLine = br.readLine()) != null
Line 5 //First[i] = br.readLine();
Line 6 //score[i] = Integer.parseInt(br.readLine());
以下操作将失败:

Line 1 //inputLine = br.readLine()) != null
Line 2 //First[i] = br.readLine();
Line 3 //score[i] = Integer.parseInt(br.readLine());
Line 4 //inputLine = br.readLine()) != null
Line 5 //First[i] = br.readLine();
//score[i] = Integer.parseInt(br.readLine());

当它试图用
Integer.parseInt(br.readLine())读取第六个不存在的行时
您将遇到该异常。

欢迎使用Stack Overflow。您的文件可能没有三行的精确倍数。不幸的是,很难说清楚,因为您没有发布该文件的示例。此外,如果您的代码确实是这样的,我强烈建议您使用IDE为您格式化代码,缩进更为恰当。(如果代码在IDE中看起来很好,那么请确保在发布时看起来是一样的。)作为编写好的堆栈溢出问题的另一个实用技巧,可能是例外(您应该给出完整的细节)在程序的早期就出现了,这使得它的其余部分与问题无关,真的。提供一个-其中“最小”在帮助我们帮助您而不必查看大量无关代码方面非常重要-总是很有帮助的。