0

该程序有 2 个类和一个 main 方法,应该从文件中读取。我的问题是该行double listPrice = fileScan.nextDouble();给出了这样的错误异常Exception in thread "main" java.util.InputMismatchException。错误在这个类中:

这是文件的内容:
本田雅阁

2004 16780.00 10.0

克莱斯勒 SUV

2002 8600.00 0.0

丰田凯美瑞

2007 21799.99 3.0

福特护航

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
4

3 回答 3

1

此异常由 Scanner 引发,以指示检索到的令牌与预期类型的​​模式不匹配(Double 必须用 .或 分隔,如所说的 jlordo),或者令牌超出预期类型的​​范围。可能是文件内容问题。

于 2012-10-19T21:12:24.847 回答
1

Scanner的nextDouble()方法是区域感知的(请参阅文档)。这意味着,如果您的语言环境设置为“.”所在的国家/地区。分隔浮点数后面将是一个可解析的双精度值:123.456而后面的数字会给你一个 InputMismatchException 123,456。在欧洲123,456 会起作用,并且123.456会抛出异常。希望能帮助到你...

于 2012-10-19T21:31:35.107 回答
0

您可能需要考虑打印出每一行。你得到的可能比你预期的要多。

于 2012-10-19T21:47:00.247 回答