我不知道如何解决代码中的运行时错误。 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
我知道了
这是我的测试代码:
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()[此失败]
在Scanner
类中,当扫描器无法再输入任何单词时,将抛出NoSuchElementException
。 next()
,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块捕获了。