0

我已经构建了这个程序,它将从一个文件中读取记录并基于一个学生类构建一个学生数组。

**学生测试班

import java.io.*;
import java.util.Scanner;

public class StudentTest 
{
    public static void main(String[] args) 
    {
    String name;
    String address;
    String major;
    double gpa;
    int classLevel;
    int college;
    String blank;
    String idNumber;

    Scanner fileIn = null;
    try
    {
        fileIn = new Scanner (new FileInputStream("student.dat"));
    }
    catch (FileNotFoundException e)
    {
        System.out.println("File not found");
        System.exit(0);
    }

    Student[] aStudent = new Student[15];
    int index = 0;
    if (fileIn.hasNext())
    {
    for (index=0; index <= 15; index++)
    {
        blank = fileIn.nextLine();
        name = fileIn.nextLine();
        //System.out.println("Name: " + name);
        address = fileIn.nextLine();
        //System.out.println("Address: " + address);
        major = fileIn.nextLine();
        gpa = fileIn.nextDouble();
        //System.out.println("Major: " + major + " GPA: " + gpa);
        classLevel = fileIn.nextInt();
        college = fileIn.nextInt();
        //System.out.println("Class Level: " + classLevel + " college " + college);
        idNumber = fileIn.nextLine();
        aStudent[index] = new Student(name, address, major, gpa, classLevel, college, idNumber);
        //System.out.println("===================================");
        aStudent[index].Display();
    }
    }
    else
    {
    fileIn.close();
    }
   }
     }

** 学生班

    import java.util.Scanner;

    public class Student 
       {
       private String name;
       private String address;
       private String major;
       private double gpa;
       private int classLevel;
       private int college;
       private String idNumber;
       Scanner keyboard = new Scanner(System.in);

    public Student(String name, String address, String major, double gpa, int classLevel, int coll, String idNum)
    {
        this.name = name;
        this.address = address;
        this.gpa = gpa;
        this.major = major;
        this.classLevel = classLevel;
        this.college = coll;
        this.idNumber = idNum;

    }
    public String getName()
    {
        return name;
    }
    public String getAddress()
    {
        return address;
    }
    public String getMajor()
    {
        return major;
    }
    public double getGPA()
    {
        return gpa;
    }
    public int getClassLevel()
    {
        return classLevel;
    }
    public int getCollege()
    {
        return college;
    }
    public String getID()
    {
        return idNumber;
    }
    public void setAddress(String address)
    {
    }
    public void setMajor(String maj)
    {
    }
    public void setCollege(int coll)
    {
    }
    public void Display()
    {
        System.out.println("Name: "+getName());
        System.out.println("Address: "+getAddress());
        System.out.println("Major: " + getMajor());
        System.out.println("GPA: "+getGPA()+" Class Level: "+getClassLevel()+" College: "+getCollege());
        System.out.println("ID: "+getID());
        System.out.println("===============================");
    }
}

这是文件(student.dat)

Doe John D 
123 Fake St
IS 
4.0 
4 
15
M123456789

Smith Thomas F 
345 Lakeside Ln 
ACCT 
3.0
2 
14
M235896135

当我运行它时,这是我的输出

Name: Doe John
Address: 123 Fake St
Major: IS 
GPA: 4.0 Class Level: 4 College: 15
ID: 
===============================
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at StudentTest.main(StudentTest.java:41)

谢谢

4

1 回答 1

1

了解一种 Scanner 方法处理行尾 (EOL) 令牌,这是nextLine(),而所有其他方法都没有。因此,如果您nextInt()多次调用,然后调用nextLine()nextLine()调用将从前一次nextInt()调用中获取 EOL 令牌缠结。一种解决方案是按照您的nextInt()要求nextLine()吞下 EOL 令牌。

例如,改变这个:

    college = fileIn.nextInt();
    idNumber = fileIn.nextLine();

对此:

    college = fileIn.nextInt();
    fileIn.nextLine();  // handle the EOL token
    idNumber = fileIn.nextLine();
于 2013-10-01T00:08:32.683 回答