0

このプログラムには main メソッドを持つ 2 つのクラスがあり、ファイルから読み取ることになっています。私の問題は、行double listPrice = fileScan.nextDouble();がこのようなエラー例外を与えることException in thread "main" java.util.InputMismatchExceptionです。エラーはこのクラスにあります:

ファイルの内容は次のとおりです。
Honda Accord

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

この例外はスキャナによってスローされ、取得されたトークンが予想される型のパターンと一致しないこと (Double は、前述のjlordo のように . または で区切る必要があります)、またはトークンが予想される型の範囲外であることを示します。おそらく、ファイルの内容の問題です。

于 2012-10-19T21:12:24.847 に答える
1

ScannerのnextDouble()メソッドはロケールに対応しています (ドキュメントを参照)。これは、ロケールが「.」がある国に設定されている場合を意味します。浮動小数点数を分離すると、次は解析可能な double 値になります:123.456一方、次の数値は InputMismatchException を返し123,456ます。ヨーロッパで123,456 は機能し、123.456例外がスローされます。それが役に立てば幸い...

于 2012-10-19T21:31:35.107 に答える
0

各行を印刷することを検討してください。期待以上のものを得られるかもしれません。

于 2012-10-19T21:47:00.247 に答える