2016-09-26 4 views
1

Недавно я начал изучать FileIO и создал простую программу, в которой пользователь вводит свое имя и возраст. Программа компилируется нормально, но когда я запускаю программу, я получаю следующее сообщение:Почему я получаю исключение NoSuchElementException?

Exception in thread "main" java.util.NoSuchElementException 
     at java.util.Scanner.throwFor(Scanner.java:862) 
     at java.util.Scanner.next(Scanner.java:1371) 
     at FileIO.main(FileIO.java:18) 

Я не уверен, что значит эта ошибка компилятора, и я был бы признателен, если кто-то может объяснить мне. Благодаря!

import java.util.*; 
import java.io.*; 

public class FileIO 
{ 
     public static void main(String args[]) 
     { 
       String sourceFile = "inputfile.txt"; 
       String destinationFile = "outputfile.txt"; 
       try{ 

         File sfile = new File(sourceFile); 
         Scanner input = new Scanner(sfile); 

         while(input.hasNext()) 
         { 
           String fname = input.next(); 
           String lname = input.next(); 
           int age = input.nextInt(); 
           System.out.println(fname + ' ' + lname + ", your age is: " + age); 

         } 
         input.close(); 

       }catch(IOException ex){ 
         System.err.println(ex); 
       } 

     } 
} 
+0

Похоже, что вам нужно сделать hasNext между ними. Можете ли вы разместить свой текст? – serge

+0

Его 'inputfile.txt', который имеет ошибку, проверьте, есть ли у вас все три представленных данных:' String fname, String lname, int age '. Ошибка идет, потому что у вас нет ни одного из ваших полей, и это в основном «возраст». –

ответ

3

Я предположу одна строка вашего входа есть что-то вроде этого:

Joe C

В этом случае ваш первый вызов next() вернется Joe, а второй один вернется C. Когда вы сейчас звоните nextInt(), здесь ничего не остается. Следовательно, NoSuchElementException.

+0

, если это будет так, тогда он будет бросать 'java.util.InputMismatchException'. 'NoSuchElementException' произойдет, если данные, которые мы пытаемся прочитать, но их нет в файле. –

+1

@Rishal «InputMismatchException» придет, когда следующая вещь, которую нужно прочитать в 'nextInt()', является чем-то, что не является целым числом (например, «Лондон»). «NoSuchElementException» появляется, когда читать нечего. –

+0

@JoeC thats, что я пытаюсь сказать :) –

3

Вы можете изменить это так:

import java.util.*; 
import java.io.*; 

public class FileIO 
{ 
    public static void main(String args[]) 
    { 
      String sourceFile = "inputfile.txt"; 
      String destinationFile = "outputfile.txt"; 
      try{ 

        File sfile = new File(sourceFile); 
        Scanner input = new Scanner(sfile); 

        while(input.hasNext()) 
        { 
          String fname = input.next(); 
          String lname = ""; 
          if (input.hasNext()) 
           lname = input.next(); 
          int age = -1; 
          if (input.hasNext()) 
           age = input.nextInt(); 
          System.out.println(fname + ' ' + lname + ", your age is: " + age); 

        } 
        input.close(); 

      }catch(IOException ex){ 
        System.err.println(ex); 
      } 

    } 
} 
1

Ваша программа работает отлично!

Убедитесь, что inputfile.txt, как:

String 
String 
int 

и существует в рабочем каталоге. Чтобы найти рабочий каталог, вы можете добавить его в свой код:

System.out.println("Working Directory = " + System.getProperty("user.dir")); 
Смежные вопросы