我正在尝试使用while
循环将文本列表中的令牌列表读取为单独的变量。
文本文件中的每一行分别为:String
,Double
,Int
,Int
,Boolean
,共有11行,但是我收到了InputMisMatchException
行之后的double
行的String
。
txt文件读为
我尝试使用.hasNext
和.hasNextLine
读取文件。当将double
更改为String
时,我得到下一个Int
的错误,然后再次将其更改为String
会将错误转移到下一个Int
,但进行了更改不会进一步移动异常。
while (infp.hasNextLine() && count < LIMIT) {
String Product_description = infp.next();
double cost_per_item = infp.nextDouble(); //line 43
int product_id = infp.nextInt();
int quantity_at_hand = infp.nextInt();
boolean domestic_origin = infp.hasNext();
items[count] = new Item(Product_description, cost_per_item,
product_id, quantity_at_hand,
domestic_origin);
count++;
}
应该将所有标记读入变量,并为文本文件中的每一行创建单独的对象。但是从错误中我相信它只会读取第一个String
,然后抛出double
的异常。
第43行的异常:
Exception in thread "main"
java.util.InputMismatchException at
java.util.Scanner.throwFor(Unknown Source) at
java.util.Scanner.next(Unknown Source) at
java.util.Scanner.nextDouble(Unknown Source) at DB_Master.main(DB_Master.java:43)
答案 0 :(得分:0)
您知道nextDouble方法正在精简一个双精度值
double nextDouble()
Returns the next token as a long. If the next token is not a float or is out of range, InputMismatchException is thrown.
尝试以这种格式输入
like:34,2而不是34.2
或尝试使用区域设置转换扫描仪
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
此类的实例能够扫描标准格式以及扫描仪语言环境格式的数字。扫描程序的初始语言环境是Locale.getDefault()方法返回的值。可以通过useLocale(java.util.Locale)方法进行更改 本地化的格式是根据以下参数定义的,对于特定的语言环境,这些参数来自该语言环境的DecimalFormat对象df以及其和DecimalFormatSymbols对象dfs。
有关更多参考,请参见Java docs
仍然无法正常工作,请尝试通过检查输入类型进行解析。
//************************************************************************
// MixedTypeInput
// This application demonstrates testing before reading to be
// sure to use the correct input method for the data.
//************************************************************************
import java.io.*;
import java.util.Scanner;
public class MixedTypeInput
{
public static void main(String[] args)
{
double number;
Scanner in = new Scanner(System.in);
System.out.println("Enter your gross income: ");
if (in.hasNextInt())
{
number = (double)in.nextInt();
System.out.println("You entered " + number);
}
else if (in.hasNextFloat())
{
number = (double)in.nextFloat();
System.out.println("You entered " + number);
}
else if (in.hasNextDouble())
{
number = in.nextDouble();
System.out.println("You entered " + number);
}
else
System.out.println("Token not an integer or a real value.");
}
}