![](/img/trans.png)
[英]When reading a column in Excel file, this program reads data and empty columns
[英]reading data from file to calculate it when the program runs
該代碼應通過從文件中讀取括號和稅率來計算累進稅,但它顯示輸入不匹配錯誤。
編輯:可以編譯和運行的示例(但仍然損壞)
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
/**
<P>{@code java CalculateProgressiveXmpl R:\\jeffy\\programming\\sandbox\\xbnjava\\xbn\\z\\xmpl\\lang\\Taxes.txt}</P>
**/
public class CalculateProgressiveXmpl {
private static double baseSalary = 0.0;
private static double tax = 0.0;
public static final void main(String[] as_1RqdPathToInput) {
try {
calculateProgressive(as_1RqdPathToInput[0]);
} catch(RuntimeException rtx) {
if(as_1RqdPathToInput.length == 0) {
throw new IllegalArgumentException("One required parameter missing: Path to Taxes.txt");
}
throw rtx;
} catch(IOException iox) {
throw new RuntimeException(iox);
}
}
public static final void calculateProgressive(String s_inputFile) throws FileNotFoundException,
IOException {
try {
Scanner readtax = new Scanner(new FileReader(s_inputFile));
String taxType = readtax.next();
String brackets = readtax.next();
int ammount = readtax.nextInt() - 1;
double tax1[] = new double[ammount + 1];
while (readtax.hasNext()) {
for (int i = 0; i <= ammount - 1; i++) {
double bottombracket = readtax.nextDouble();
double topbracket = readtax.nextDouble();
double ptax = readtax.nextDouble();
if ((bottombracket <= baseSalary)
&& (baseSalary >= topbracket)) {
tax1[i] = (topbracket - bottombracket) * ptax;
} else if ((baseSalary >= bottombracket)
&& (baseSalary <= topbracket)) {
tax1[i] = (baseSalary - bottombracket) * ptax;
} else {
if (i == ammount - 1) {
double fbottombracket = readtax.nextDouble();
double fptax = readtax.nextDouble();
tax1[i] = (baseSalary - fbottombracket) * ptax;
}
}
tax = tax + tax1[i];
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
堆棧跟蹤:
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.nextInt(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at CalculateProgressiveXmpl.calculateProgressive(CalculateProgressiveXmpl.java:30) at CalculateProgressiveXmpl.main(CalculateProgressiveXmpl.java:14)
有問題的行: calculateProgressive(as_1RqdPathToInput[0]);
關於如何解決它的任何建議?
如果這是您的數據:
"Progressive Tax Ammount of brackets: 2 0.0 30000.0 0.0 45001.0 45000.0 0.2 "
然后String taxType = readtax.next();
將是“ Progressive”,並且String brackets = readtax.next();
將是“稅”。 您應該從那里看到問題:)
用調試器單步執行代碼也應該很明顯。
readtax.nextInt()
在實際上應為next()
早期就被調用,因為Ammount失敗了整數的模式匹配。
嘗試: "Progressive Tax 2 0.0 30000.0 0.0 45001.0 45000.0 0.2"
測試您的代碼時,我發現InputMismatchException的兩個不同原因:
1)正如其他人已經指出的那樣,在第一個int之前您有太多的前導字符串。 因此,將您的輸入更改為只有兩個像預期的那樣。
2)在我的語言環境中,我用,而不是。 (點)表示十進制值,因此Scanner使用“ \\\\”作為decimalSeparator,並且在解析輸入時會在nextDouble上出現InputMismatchException失敗。 我建議您也檢查語言環境以驗證設置。
注意:一旦我解決了這些問題,代碼仍然會失敗(這次是java.util.NoSuchElementException),所以我認為一旦擺脫InputMismatchException,您仍然必須重新編寫算法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.