[英]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.