* JAVA *我无法弄清楚如何解决代码中的运行时错误。没有任何输入的NoSuchElementException

问题描述 投票:-4回答:2

我不知道如何解决代码中的运行时错误。 NoSuchElementException没有任何输入。

    Scanner inputFile = new Scanner(new File("list.txt"));                                      

    ArrayList<String> actor = new ArrayList<String>();                                          
    ArrayList<String> movie = new ArrayList<String>();
    ArrayList<String> year = new ArrayList<String>();

    while (inputFile.hasNext()) {                                                   
        String actor1 = inputFile.next() + " " + inputFile.next(); //LINE 36--ERROR
        String movie1 = inputFile.next();

        while (!(inputFile.hasNext())) {
            movie1 += " " + inputFile.next();
        }

        String year1 = inputFile.next();

        actor.add(actor1);                                                  
        movie.add(movie1);
        year.add(year1);
    }

    inputFile.close();   
    Scanner kb = new Scanner(System.in);                                                

    System.out.println("Select Options (Enter Q to Quit):");                                        
    System.out.println("1. Bacon Degrees of Freedom");
    System.out.println("2. Add Entry");
    System.out.println("3. Delete Entry");

这是我得到的错误:

Exception in thread "main" java.util.NoSuchElementException
  at java.base/java.util.Scanner.throwFor(Scanner.java:937)
  at java.base/java.util.Scanner.next(Scanner.java:1478)
  at DOFMunson.main(DOFMunson.java:36)

以下是示例输出:enter image description here

以下是文本文件中的一行:Brad Pitt Se7en 1995

java arraylist file-io runtime-error nosuchelementexception
2个回答
1
投票

我知道了

这是我的测试代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class Iwin{
    public static void main(String[] args){
        try{
            Scanner inputFile = new Scanner(new File("C:/xampp/htdocs/java/list.txt"));                                      

            ArrayList<String> actor = new ArrayList<String>();                                          
            ArrayList<String> movie = new ArrayList<String>();
            ArrayList<String> year = new ArrayList<String>();

            while (inputFile.hasNext()) {                                                   
                String actor1 = inputFile.next() + " " + inputFile.next(); //LINE 36--ERROR
                String movie1 = inputFile.next();

                while (!(inputFile.hasNext())) {
                    movie1 += " " + inputFile.next();
                }

                String year1 = inputFile.next();

                actor.add(actor1);                                                  
                movie.add(movie1);
                year.add(year1);
                System.out.println(actor1);
            }
            inputFile.close();   
            Scanner kb = new Scanner(System.in);                                                

            System.out.println("Select Options (Enter Q to Quit):");                                        
            System.out.println("1. Bacon Degrees of Freedom");
            System.out.println("2. Add Entry");
            System.out.println("3. Delete Entry");
        }catch(FileNotFoundException ex){

        }
    }
}

和第36行:[对我来说第14行]

String actor1 = inputFile.next() + " " + inputFile.next(); //LINE 36--ERROR [line 14 for me]

原因是由于list.txt文件。

这是我的示例文本文件:

1 asdf
2 sadf;lkjfjf
3 okay 
4 I got this
5 1
6 you know how i do
7 xd
8 2
9 3

这将产生错误,但是如果您使用偶数行的文件,则不会1个asdf2 sadf; lkjfjf3好4我知道了5 16你知道我怎么做7 xd8 29 310好了

此文件将起作用。原因是actor1 = inputFile.next()+“” + inputFile.next();它读取第1行,然后读取第2行,并在两者中间添加“”。因此,当行数为奇数时,第二个调用[inputFile.next()]失败,因此第一个调用inputFile.next()[起作用] +“” + inputFile.next()[此失败]


0
投票

Scanner类中,当扫描器无法再输入任何单词时,将抛出NoSuchElementExceptionnext()nextInt()nextDouble()等都相同

通常不建议使用扫描仪读取文件,System.in等。

尝试这样阅读:

        StringBuilder builder = new StringBuilder();
        try
        (
            FileReader f = new FileReader("C:\\Users\\jeffg\\Desktop\\list.txt");
            BufferedReader reader = new BufferedReader(f);
        )
        {   
            while (reader.ready())
            {
                builder.append((char) reader.read());
            }
        }
        catch (IOException exc)
        {
            // TODO Auto-generated catch block
            exc.printStackTrace();
        }

        System.out.print(builder);

这避免了整体使用Scanner。没有更多例外了,因为它们都被catch块捕获了。

© www.soinside.com 2019 - 2024. All rights reserved.