java.util.NoSuchElementException错误

java.util.NoSuchElementException错误,java,readfile,Java,Readfile,我尝试从文本文件中读取整行内容,并以不同的方式显示它们。比如说, 123456J;Gabriel;12/12/1994;67;67;89; 但控制台中的结果如下所示: 123456J Gabriel 72(which is average of three numbers) 这是我的密码: public class Student{ String adminNo; String name; GregorianCalendar birthDate; int test1

我尝试从文本文件中读取整行内容,并以不同的方式显示它们。比如说,

    123456J;Gabriel;12/12/1994;67;67;89;
但控制台中的结果如下所示:

    123456J Gabriel 72(which is average of three numbers)
这是我的密码:

    public class Student{

String adminNo;
String name;
GregorianCalendar birthDate;
int test1,test2,test3;

public Student(String adminNo,String name,String birthDate,int test1, int test2, int test3){
    this.adminNo = adminNo;
    this.name = name;
    this.birthDate = MyCalendar.convertDate(birthDate);
    this.test1 = test1;
    this.test2 = test2;
    this.test3 = test3;
}

public Student(String studentRecord){
    String strBirthDate;
    Scanner sc = new Scanner(studentRecord);
    sc.useDelimiter(";");
    adminNo = sc.next();
    name = sc.next();
    strBirthDate = sc.next();
    birthDate = MyCalendar.convertDate(strBirthDate.toString());
    test1 = sc.nextInt();
    test2 = sc.nextInt();
    test3 = sc.nextInt();
}

public int getAverage(){ 
    return (( test1 + test2 + test3 ) / 3 ) ;
}

public String toString(){
    return (adminNo + " " + name + " " + getAverage());
}

public static void main(String [] args){

    Student s = new Student ("121212A", "Tan Ah Bee", "12/12/92", 67, 72, 79);
    System.out.println(s);

    String fileName = "student.txt";
    try{
        FileReader fr = new FileReader(fileName);
        Scanner sc = new Scanner(fr);

        while(sc.hasNextLine()){
            Student stud = new Student(sc.nextLine());
            System.out.println(stud.toString());
        }

        fr.close();
    }catch(FileNotFoundException exception){
        System.out.println("File " + fileName + " was not found");
    }catch(IOException exception){
        System.out.println(exception);
    }
}
以及错误:

    Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at Student.<init>(Student.java:24)
at Student.main(Student.java:52)
线程“main”java.util.NoSuchElementException中的异常 位于java.util.Scanner.throwFor(未知源) 位于java.util.Scanner.next(未知源) 学生时代。(Student.java:24) 在Student.main(Student.java:52) 但是我得到了java.util.NoTouchElementException错误。我错过什么了吗?它刚刚工作,但突然出现了一个错误。我不知道为什么


感谢您的帮助。

在您调用扫描仪上的下一个…()之前,请确保扫描仪实际具有元素,以避免出现此异常。

在您调用扫描仪上的下一个…()之前,请确保扫描仪实际具有元素避免该异常。

您可以将Student构造函数修改为如下内容,以检查异常发生时的行

public Student(String studentRecord){
    String strBirthDate;
    Scanner sc = new Scanner(studentRecord);
    sc.useDelimiter(";");

    try {
         adminNo = sc.next();
         name = sc.next();
         strBirthDate = sc.next();
         birthDate = MyCalendar.convertDate(strBirthDate.toString());
         test1 = sc.nextInt();
         test2 = sc.nextInt();
         test3 = sc.nextInt();
    } catch (NoSuchElementException exception)
        System.out.println("NoSuchElementException, the line was: " + studentRecord);
    }
}

您可以将Student构造函数修改为如下内容,以检查发生异常时的行

public Student(String studentRecord){
    String strBirthDate;
    Scanner sc = new Scanner(studentRecord);
    sc.useDelimiter(";");

    try {
         adminNo = sc.next();
         name = sc.next();
         strBirthDate = sc.next();
         birthDate = MyCalendar.convertDate(strBirthDate.toString());
         test1 = sc.nextInt();
         test2 = sc.nextInt();
         test3 = sc.nextInt();
    } catch (NoSuchElementException exception)
        System.out.println("NoSuchElementException, the line was: " + studentRecord);
    }
}

你能打印堆栈跟踪或获得异常的行吗?@Sudhanshu我已经更新了错误。你在扫描仪上调用next()5-6次,你确定每行都有那么多元素吗?你能在构造器中打印行(studentRecord)吗?是的,每行有6个信息。如何在构造函数中打印行?System.out.println(studentRecord);//将其作为构造函数的第一行。当你得到异常时,检查studentRecord的值。你能打印堆栈跟踪或得到异常的行吗?@Sudhanshu我已经更新了错误你在扫描仪上调用next()5-6次,你确定每行都有那么多元素吗?你能在构造器中打印行(studentRecord)吗?是的,每行有6个信息。如何在构造函数中打印行?System.out.println(studentRecord);//将其作为构造函数的第一行。当你得到异常时,检查studentRecord的值;陈德铭;01/08/1980;60;70;98031234F;陈德铭;01/08/1980;60;70;980无接触元素异常,线路为:123456U;加布里埃尔;12/12/1987;56;67;78123456U;加布里埃尔;12/12/1987;56;67;78 null 0 NoSuchElementException,这行是:null null 0,我完全迷失了方向,所以一行中有两条记录。你必须在源文件中阻止它。哦,我已经解决了。文本文件中有一个空行。谢谢你收到这个:NoTouchElementException,该行是:031234F;陈德铭;01/08/1980;60;70;98031234F;陈德铭;01/08/1980;60;70;980无接触元素异常,线路为:123456U;加布里埃尔;12/12/1987;56;67;78123456U;加布里埃尔;12/12/1987;56;67;78 null 0 NoSuchElementException,这行是:null null 0,我完全迷失了方向,所以一行中有两条记录。你必须在源文件中阻止它。哦,我已经解决了。文本文件中有一个空行。谢谢