我目前正在运行一个我认为已经完成的票务发行程序,但是在我创建了一些票务预订并将它们写入文本文件之后,我尝试在第二次或第三次输入后运行并且它给了我这个例外:
Exception in thread "main" java.lang.NumberFormatException: For input string: "59.75"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at TicketBoxProject.TicketBoxMain.main(TicketBoxMain.java:94)
try {
br = new BufferedReader(new FileReader("BookingsList.txt"));
FileReader fr = new FileReader("BookingsList.txt");
br = new BufferedReader(fr);
String str;
while ((str = br.readLine()) != null) {
Bookings booking = new Bookings(); // single job of class
// JobList
booking.setFName(str);
str = br.readLine();
booking.setSName(str);
str = br.readLine();
booking.setHouseNo(str);
str = br.readLine();
booking.setStreet(str);
str = br.readLine();
booking.setTown(str);
str = br.readLine();
booking.setPostCode(str);
str = br.readLine();
booking.setEmail(str);
str = br.readLine();
booking.setCardType(str);
str = br.readLine();
booking.setCardNumber(Long.parseLong(str));
str = br.readLine();
booking.setCardExpiryDate(str);
str = br.readLine();
booking.setCardSecurityNo(Integer.parseInt(str));
str = br.readLine();
booking.setTicketsReqd(Integer.parseInt(str));
str = br.readLine();
booking.setTotal(Double.parseDouble(str));
str = br.readLine();
booking.setRefNo(Integer.parseInt(str));
str = br.readLine();
booking.setDate(str);
str = br.readLine();
booking.setArtist(str);
str = br.readLine();
booking.setVenue(str);
str = br.readLine();
booking.setCity(str);
str = br.readLine();
bookings.add(booking); // add to arraylist
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
br.close();
java:94
指向setTicketsReqd
行,但"59.75"
应引用此下方的setTotal
行,正如您从代码中看到的那样,我确保了TicketsReqd是一个整数,Total是一个Double。如果有人知道除了从文本文件中删除文件之外的快速修复我会很感激,因为我无法理解为什么错误消息告诉我输入“59.75”有一个错误(这是以前写的总数) -to-textfile booking)然后指向不同的代码行。
答案 0 :(得分:1)
在您的代码中,我会对19
方法进行readLine()
次调用,这两种方法都是while
循环条件和循环体的一部分。但我发现在setXyz
实例上只调用了18个Bookings
方法。
忽略循环中的最后一次readLine()
调用;在readLine()
循环的条件下,它被while
的调用所取代。它将在下一个条目的第一行读取并忽略它。然后,第一个readLine
电话会读取预订中的第二行。这可能会导致“一个一个”错误,因此59.75
现在正被调用Integer.parseInt
的行读入。
删除上一次readLine()
电话。