别着急,我是自学成才的,对这一切都很陌生。 所以我试图写一本地址簿。一切工作正常,没有错误,没有异常(exception)。保存了项目,关闭我的笔记本电脑,去吃午饭。回来后尝试运行代码,收到错误。
根据异常,我知道它与我的扫描仪有关。 异常突出显示
int phone = inFile.nextInt()
作为问题。但我无法弄清楚它出了什么问题。
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.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at test.AddressBook.main(AddressBook.java:255)
代码
public class AddressBook
{
static Scanner inFile;
static FileWriter outFile;
static ArrayList<extPerson> person;
static extPerson record;
static File fileName = new File("AddressBook.txt");
private boolean b;
这是 Main 的代码。
public static void main(String[]args) throws IOException
{
int option = 0;
int n = 0;
AddressBook ab = new AddressBook();
inFile = new Scanner(new FileReader(fileName)).useDelimiter("[|\\n]");
//System.out.println(inFile.delimiter());
//int count = 0;
while(inFile.hasNext())
{
String fName = inFile.next();
//System.out.print(fName);
String mName = inFile.next();
//System.out.print(mName);
String lName = inFile.next();
//System.out.print(lName);
int phone = inFile.nextInt();
//System.out.println(phone);
String relationship = inFile.next();
//System.out.print(relationship);
int day = inFile.nextInt();
//System.out.print(day);
int month = inFile.nextInt();
//System.out.print(month);
int year = inFile.nextInt();
//System.out.print(year);
String street = inFile.next();
//System.out.print(street);
String city = inFile.next();
//System.out.print(city);
String state = inFile.next();
//System.out.print(state);
String zipCode = inFile.next();
//System.out.println(zipCode);
record = new extPerson(fName, mName, lName, phone, relationship,
day, month, year, street, city, state, zipCode);
person.add(record);
}
while (true)
{
String input = JOptionPane.showInputDialog(
"Please Enter a number indicating your choice of action:"
+ "\nEnter 1 To Add Record"
+ "\nEnter 2 To Search Record By Last Name"
+ "\nEnter 3 To Delete Record"
+ "\nEnter 4 To Modify Record"
+ "\nEnter 5 To Display All Records"
+ "\nEnter 6 To Exit");
if((input != null)&&(input.isEmpty() != true))
{
option = Integer.parseInt(input);
if((option > 0 ) && (option < 7))
{
switch (option) {
case 1:
ab.addRecord();
break;
case 2:
ab.searchRecord();
break;
case 3:
ab.deleteRecord();
break;
case 4:
ab.modifyRecord();
break;
case 5:
ab.allRecord();
break;
case 6:
System.exit(0);
}
}
else if(option == JOptionPane.CLOSED_OPTION)
{
n = JOptionPane.showConfirmDialog(null, "Are you sure you want to close?");
if(n == JOptionPane.YES_OPTION)
System.exit(0);
}
}
else if (input == null)
{
n = JOptionPane.showConfirmDialog(null, "Are you sure you want to close?",
"Confirm",
JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(n == JOptionPane.YES_OPTION)
System.exit(0);
}
else
{
System.out.println("Invalid option. Please try again.");
}
}
}
我只需要有人给我指出正确的方向,并可能向我解释导致此异常的原因。任何帮助将不胜感激。如果您需要更多代码来分析问题,请告诉我,我会将其发布。再次感谢。
编辑示例数据
Jeremy|Ronald|Wright|4331732|Family Member|06|04|2013|Eastlawn|Orange Cove|Texas|06666-9139
Heather|Paula|Perkins|7285248|Friends|04|06|2013|Bashford|Yuba City|New Mexico|99585-6820
Edward|Stephen|Allen|7186971|Family Member|25|06|2013|Reinke|Downey|Arizona|15915-9508
Dorothy|Philip|Robinson|8932173|Business Associate|15|07|2013|Harper|La Verne|Montana|37275-3957
Joan|Harry|Wilson|3859088|Business Associate|01|02|2014|Eastlawn|Antioch|Maryland|85923
最佳答案
逐行读取和解析将有助于避免此类问题。
while (inFile.hasNext()) {
String line = inFile.nextLine();
String[] tokens = line.split("\\|");
String fName = tokens[0];
String mName = tokens[1];
String lName = tokens[2];
int phone = Integer.parseInt(tokens[3]);
String relationship = tokens[4];
int day = Integer.parseInt(tokens[5]);
int month = Integer.parseInt(tokens[6]);
int year = Integer.parseInt(tokens[7]);
String street = tokens[8];
String city = tokens[9];
String state = tokens[10];
String zipCode = tokens[11];
}
使用您的文本文件片段执行此操作对我来说效果很好。
关于java - 代码不久前工作然后 "java.util.InputMismatchException",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22961041/