Java 为什么我会收到一个NoTouchElementException?
我最近开始学习FileIO,并创建了一个简单的程序,让用户输入他们的姓名和年龄。该程序编译得很好,但当我运行该程序时,会收到以下消息:Java 为什么我会收到一个NoTouchElementException?,java,file-io,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 Fi
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);
}
}
}
我假设您的输入中有一行是这样的:
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);
}
}
}
乔C
在这种情况下,您对next的第一次调用将返回Joe,第二次调用将返回C。当您现在调用nextInt时,这里没有任何内容可供阅读。因此出现了NoTouchElementException。我假设您的输入中有一行是这样的:
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);
}
}
}
乔C
在这种情况下,您对next的第一次调用将返回Joe,第二次调用将返回C。当您现在调用nextInt时,这里没有任何内容可供阅读。因此出现了NoTouchElementException。您可以这样更改它:
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);
}
}
}
你可以这样改变它:
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);
}
}
}
你的程序运行得很好 确保inputfile.txt类似于:
String
String
int
并存在于工作目录中。要查找工作目录,可以将以下内容添加到代码中:
System.out.println("Working Directory = " + System.getProperty("user.dir"));
你的程序运行得很好 确保inputfile.txt类似于:
String
String
int
并存在于工作目录中。要查找工作目录,可以将以下内容添加到代码中:
System.out.println("Working Directory = " + System.getProperty("user.dir"));
看起来你需要在每一步之间做下一步。你能发布你的文本吗?是你的inputfile.txt有错误,检查你是否有三个数据,比如String fname,String lname,int age。错误就要来了,因为你没有任何一个字段,而且主要是年龄。看起来你需要在每个字段之间执行hasNext。你能发布你的文本吗?是你的inputfile.txt有错误,检查你是否有三个数据,比如String fname,String lname,int age。出现错误是因为您没有任何字段,而且大部分字段都是age。如果是这种情况,那么它将抛出java.util.InputMismatchException。如果我们试图读取的数据在文件中不存在,则不会发生NoTouchElementException。@Rishal如果下一个在nextInt读取的数据不是整数,例如London,则会出现InputMismatchException。当没有东西可读时,就会出现一个NosTouchElementException。@JoeC这正是我想说的:@Chynna:如果你觉得这个答案很有用,请不要忘记将它标记为已被接受的答案,以方便将来遇到类似问题的人。如果是这样的话,它将抛出java.util.InputMismatchException。如果我们试图读取的数据在文件中不存在,则不会发生NoTouchElementException。@Rishal如果下一个在nextInt读取的数据不是整数,例如London,则会出现InputMismatchException。当没有什么东西可读时,就会出现一个无趣的例外情况。@JoeC这就是我想说的:@Chynna:如果你觉得这个答案很有用,请不要忘记把它标记为公认的答案,以利于那些将来面临类似问题的人。