有人可以向我解释为什么我在我尝试读取双倍的行中得到错误'InputMismatchException'?谢谢!
int num=inFile.nextInt();
for(int i=0;i<num;i++){
String inName=inFile.next();
double inPrice=inFile.nextDouble(); // <<<this line
Book bookInFile = new Book(inName, inPrice);
books.add(bookInFile);
}
文本文件中的数据:
4
War and Peace
12.99
Green Eggs and Ham
3.99
Harry Potter
5.99
james
5.0
答案 0 :(得分:1)
尝试这种方法它将解决您的问题。
double d ;
BufferedReader reader;
try{
reader = new BufferedReader(new FileReader("yourTextFile.txt"));
String line= reader.readLine();
while(line !=null){
try{
System.out.println(Integer.parseInt(line)+" is an Integer.");
}catch(NumberFormatException e){
try{
d=Double.valueOf(line);
System.out.println(d+" is a double.");
}catch(NumberFormatException ex){
System.out.println("Not Double ' "+line+" '");
}
}
line=reader.readLine();
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
答案 1 :(得分:0)
要知道为什么你会遇到这个例外,你可以做一些R&amp; D.Like, 使用next()而不是nextDouble(),看看你得到了什么。 如果编译器请求double,则使用nextDouble。还有一件事,当收到的令牌与模式不匹配时会发生这种异常。例如,它必须在获得双倍后获得非双重令牌,可能是获得下一行或回车
答案 2 :(得分:0)
这里的问题是Scanner默认使用whitespace
作为分隔符,所以你实际得到的是:
War
and
Peace
12.99
Green
Eggs
and
Ham
当达到nextDouble
行时,显然无法将and
转换为双倍。
将分隔符更改为换行符,您的代码应该有效:
Scanner sc = new Scanner(file);
sc.useDelimiter("\n");