繁体   English   中英

Java.util.scanner错误

[英]Java.util.scanner errors

我已经建立了这个程序,该程序将从一个文件中读取记录,并根据一个Student类建立一个学生数组。

** 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)

谢谢

请理解,一个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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM