0

ファイルからレコードを読み取り、学生クラスに基づいて学生の配列を構築するこのプログラムを構築しました。

**StudentTest クラス

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

1 つの Scanner メソッドが行末 (EOL) トークンを処理し、それnextLine()は であり、他のすべてのメソッドは処理しないことを理解してください。したがって、nextInt()何度も呼び出しnextLine()てからnextLine()呼び出しを行うと、前の呼び出しからもつれた EOL トークンが取得されnextInt()ます。1 つの解決策は、EOL トークンを飲み込むためだけにnextInt()呼び出しに従ってください。nextLine()

たとえば、次のように変更します。

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

これに:

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