簡體   English   中英

從文件讀取時輸入不匹配

[英]Input mismatch when reading from a file

我有一個文件,其數據組織如下:

Hyundai Santa Fe

2005 16999 8

Mercury Mountaineer AWD

2004 17999 7.5

Mercury Grand Marquis

2006 19999 12.5

第一行是汽車名稱,下一行是年份,價格和折扣金額。 我正在嘗試閱讀包含許多這些行的文件,並且起價是價格和折扣並不總是表示為雙倍。

這是我編寫的一段代碼,但沒有正確地解析這些代碼。 我得到輸入不匹配異常。

我究竟做錯了什么?

try {

         Scanner scanFile = new Scanner(file);
         while(scanFile.hasNext()) {   

            String carName = scanFile.nextLine();

            int year = scanFile.nextInt();
            double listPrice = scanFile.nextDouble();
            double percentDiscount = scanFile.nextDouble();

            double discountAmount = calculateDiscount(listPrice, percentDiscount);
            double netPrice = calculateNetPrice(listPrice, discountAmount);

            carList.add(new Proj1CarData(carName, year, listPrice, percentDiscount, discountAmount, netPrice));

         }
      } catch(FileNotFoundException fnfe) {
            System.out.println("Unable to locate the file supplied.");
      }

在消耗了你的int和你的兩個double s之后,你需要在讀取下一個車名之前使用line feed

因此,只需在carList.add(...)之后添加scanFile.nextLine()即可。

實際上,只是為了處理最后一行的情況, 假設在輸入文件中的最后一個double數據之后沒有換行 ,你應該使用:

if(scanLine.hasNextLine()) {
    scanLine.nextLine();
}

為了保護對scanLine.nextLine()的調用,它會拋出NoSuchElementException

干杯!

nextLine()定義為

使此掃描器前進超過當前行並返回跳過的輸入。 此方法返回當前行的其余部分,不包括末尾的任何行分隔符。 該位置設置為下一行的開頭。 由於此方法繼續搜索輸入以查找行分隔符,因此如果不存在行分隔符,則它可以緩沖搜索要跳過的行的所有輸入。

意味着nextLine()將從當前位置讀取到行分隔符。

第一次調用double percentDiscount = scanFile.nextDouble(); ,掃描儀的光標位於2005 16999 82005 16999 8

在循環的第二次迭代中, String carName = scanFile.nextLine(); 將讀取一個空字符串,因為8和行分隔符之間沒有字符串。 然后, int year = scanFile.nextInt(); 當光標正在查看Mercury Mountaineer AWD拋出一個InputMismatchException

我不知道我是否能夠很好地解釋自己。

要解決此問題,簡化版本只是在循環結束時添加額外的nextLine()調用:


String carName = scanFile.nextLine();

int year = scanFile.nextInt();
double listPrice = scanFile.nextDouble();
double percentDiscount = scanFile.nextDouble();
scanFile.nextLine();

我想更好的處理方法是使用nextLine()讀取每一行,並檢查該行是否為carname或year / price / discount info。

希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM