为什么我收到NoSuchElementException?

时间:2016-09-26 19:43:55

标签: java file-io

我最近开始学习FileIO并创建了一个简单的程序,用户输入他们的名字和年龄。程序编译得很好,但是当我运行程序时,我收到以下消息:

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);
                }

        }
}

3 个答案:

答案 0 :(得分:3)

我假设您输入的一行是这样的:

Joe C

在这种情况下,您第一次调用next()将返回Joe,第二次调用将返回C。现在打电话给nextInt()时,这里没有任何内容可供阅读。因此NoSuchElementException

答案 1 :(得分: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);
            }

    }
}

答案 2 :(得分:1)

你的程序运行正常!

确保inputfile.txt类似于:

String
String
int

并存在于工作目录中。要找到工作目录,您可以将其添加到您的代码中:

System.out.println("Working Directory = " +  System.getProperty("user.dir"));