这个程序有两个带有main方法的类,应该从一个文件中读取。我的问题是,行double listPrice = fileScan.nextDouble();
会出现错误异常,例如Exception in thread "main" java.util.InputMismatchException
。错误发生在这个类中:
这是文件的内容:
本田雅阁
2004 16780.00 10.0
克莱斯勒SUV2002 8600.00 0.0
丰田凯美瑞
2007 21799.99 3.0
福特Escort
2006 12345.78 5.5
//注意每行之间没有空格
class Proj1P2CarAryListService
{
private ArrayList<Proj1CarData> carList = new ArrayList<Proj1CarData>();
public Proj1P2CarAryListService()
{
carList = new ArrayList<Proj1CarData>();
}
public void readStoreCarsData()
{
Scanner scan = new Scanner(System.in);
Scanner fileScan;
boolean validName = false;
double discountAmount;
double netPrice;
do
{
System.out.print("Enter file name: ");
String str1 = scan.nextLine();
try
{
fileScan = new Scanner(new File(str1));
validName = true;
while (fileScan.hasNext())
{
String name = fileScan.nextLine();
String modelYear = fileScan.next();
double listPrice = fileScan.nextDouble();
double percentDiscount = fileScan.nextDouble();
discountAmount = listPrice * percentDiscount/100.0;
netPrice = listPrice - discountAmount;
Proj1CarData proj1 = new Proj1CarData(name, modelYear, listPrice, percentDiscount, discountAmount, netPrice);
carList.add(proj1);
System.out.println(proj1.toString());
}// end while
}// end try
catch (FileNotFoundException fnfe)
{
System.out.println("Invalid File name; enter again");
}
} while (!validName);
}//readStoreCarsData
答案 0 :(得分:1)
扫描程序抛出此异常,表示检索到的令牌与预期类型的模式不匹配(Double必须用。分隔,或者像jlordo 一样),或者令牌超出预期类型的范围。也许这是一个文件内容问题。
答案 1 :(得分:1)
扫描程序的nextDouble()
方法可识别区域设置(请参阅Documentation)。
这意味着,如果您的区域设置设置为“。”的国家/地区。将以下的浮点数分隔为可解析的double值:123.456
,而后面的数字将为您提供InputMismatchException 123,456
。在欧洲123,456
会起作用,123.456
会抛出异常。希望它有所帮助...
答案 2 :(得分:0)
您可能需要考虑打印每一行。你可能会得到比你想象的更多。