java - 使用扫描仪读取文件时出现InputMismatchException

标签 java file java.util.scanner

我有文件.txt:

7 10 5
ADD_FLIGHT SV221 Jeddah NewYork 30 7000
ADD_FLIGHT SV223 Jeddah London 30 4000
ADD_FLIGHT SV225 Jeddah Paris 30 3500
ADD_FLIGHT SV227 Jeddah Cairo 30 2000
ADD_PASS Mohammed Ali 33 M 0555788778
ADD_PASS Sara Maghrabi 30 F 0555111111
ADD_PASS Hani Ali 20 M 0555223344
ADD_PASS Mohammed Hafeth 33 M 0555889876
ADD_PASS Ahmad Sami 44 M 0555768768
ADD_FLIGHT SV332 Jeddah Riyadh 20 500
ADD_FLIGHT SV334 Jeddah Dammam 20 600
ADD_FLIGHT SV367 Jeddah Dubai 25 2000
ADD_PASS Salwa Ali 33 F 0555765672
ADD_PASS Faisal Amri 20 M 0555111111
ADD_PASS Mona Saleem 33 F 0555222112
ADD_PASS Ali Ali 33 M 0555743344
ADD_PASS Marwa Ahmad 33 F 0555545855

如果文件包含 ADD_flight 语句,我想从文件中读取航类信息,并将信息放入对象数组中。如果文件包含,乘客也从文件中读取乘客信息,并将信息放入对象数组中ADD_PASD 语句。

我不知道为什么我的代码中有错误:

File fin = new File("input.txt");
Scanner input = new Scanner(fin);

int c=0;
while (input.hasNextLine()){
     String s=input.nextLine();
     if (input.hasNext("ADD_FLIGHT")){
        inputFlight ( input,  flight ,fin );  
     }
     else if (input.hasNext("ADD_PASS")){
         inputPass( input,  passenger,fin );
          listFlightDetails( flight);
          listPassengerDetails(passenger);
     }}}//end the mine 


public static void inputFlight (Scanner input, Flight[] flight ,File fin ) throws IOException{
if (indexFlight<flight.length)  {
   flight[indexFlight]=new Flight();
   String flightCode=input.next();
    flight[indexFlight].setflightCod(flightCode);
        String ctyfrom=input.next();
    flight[indexFlight].setcityFrom(ctyfrom);
        String ctyto=input.next();
    flight[indexFlight].setCityTo(ctyto);
             int total=input.nextInt();
                  flight[indexFlight].setTotalSeats(total);
             double price=input.nextDouble();
                  flight[indexFlight].setprice(total);

indexFlight++;

}}
     public static void inputPass( Scanner input,  Passenger[] passenger ,File fin ) throws IOException{
if (indexPassenger<passenger.length)  {
   passenger[indexPassenger]=new Passenger();
   String name=input.next();
    passenger[indexPassenger].setname(name);
        int age=input.nextInt();
    passenger[indexPassenger].setage(age);
        char gender=input.nextLine().charAt(0);
    passenger[indexPassenger].setgender(gender);
            String d=input.next();
                  passenger[indexPassenger].setphone(d);

indexPassenger++;

}}
      public static void listFlightDetails(Flight[] flight) {
       for (int i = 0; i < indexFlight; i++) {
           if (flight[i].getflightCod() != null) {
               System.out.println("Enter " + i + " for Flight code :" + flight[i].getflightCod() + " , " + flight[i].getcityFrom() + " , " + flight[i].getCityTo());


}}}
public static void listPassengerDetails(Passenger[] passenger) {
       for (int i = 0; i < indexPassenger; i++) {
           if (passenger[i].getname() != null) {
               System.out.println("Enter " + i + " for  Passenger  :" + passenger[i].getname() + " , " + passenger[i].getgender());
           }

 }

}

如何更正代码? 这个错误,随之而来

Exception in thread "main" java.util.InputMismatchException
   at java.util.Scanner.throwFor(Scanner.java:864)
   at java.util.Scanner.next(Scanner.java:1485)
   at java.util.Scanner.nextInt(Scanner.java:2117)
   at java.util.Scanner.nextInt(Scanner.java:2076)
   at FlightSystem.FlightSystem.inputFlight(FlightSystem.java:65)
   at FlightSystem.FlightSystem.main(FlightSystem.java:34)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
This error for pass

    Enter 0 for Flight code :SV223 , Jeddah , London
        Enter 0 for Flight code :SV223 , Jeddah , London
        Enter 0 for Flight code :SV223 , Jeddah , London
        Enter 1 for Flight code :SV227 , Jeddah , Cairo
        Enter 0 for Flight code :SV223 , Jeddah , London
        Enter 1 for Flight code :SV227 , Jeddah , Cairo
        Exception in thread "main" java.util.InputMismatchException
           at java.util.Scanner.throwFor(Scanner.java:864)
           at java.util.Scanner.next(Scanner.java:1485)
           at java.util.Scanner.nextInt(Scanner.java:2117)
           at java.util.Scanner.nextInt(Scanner.java:2076)
           at FlightSystem.FlightSystem.main(FlightSystem.java:39)
        Java Result: 1

最佳答案

为了简单起见,我们可以尝试这样的事情:

while (input.hasNextLine()) {
    String s=input.nextLine();
    if(s.startsWith("ADD_FLIGHT")) {
        // Add to list of Flight DTO
    }
    else if(s.startsWith("ADD_PASS")) {
        // Add to list of passanger DTO
    }

    s = null;
}

我对您的文本文件的第一行表示怀疑:

flightCode is coming as : ADD_FLIGHT
ctyfrom coming as : SV223
ctyto is coming as : Jeddah
and total is coming as "NewYork" which can't be converted into int.

您可以放置​​ Sysout 来验证它,或者也放置一个调试点。

如果我的怀疑是正确的,则在方法 inputFlight() 中的行 String FlightCode=input.next(); 之前添加 input.next();

关于java - 使用扫描仪读取文件时出现InputMismatchException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29488765/

相关文章:

java - 使用多线程对文件进行排序

java - 为什么 Double.parseDouble(scan.next()) 比 scan.nextDouble() 快这么多?

Java 8 : How to get particular value within object inside list without converting stream back to list and fetch value at 0th location?

python - 从文本文件中获取矩阵的行、列平均值

java - 音乐转录

file - 如何使用 Selenium 和 C# 在 IE 浏览器中处理文件下载对话框/弹出窗口

Java 扫描器和 if-else 语句

java - 我想在 Java 中用点而不是逗号输入 double 值,但出现异常

java - 使用 jasper 报告或 iText for Java 打印页面大小(20.5 x 14 厘米)的自定义发票

java - 为什么CMS Final Remark中ParNew,sys time这么长?