此代码应通过读取文件中的括号和税率来计算累进税,但它会显示不匹配的输入错误。
编辑:可编译和运行的示例(但仍然已损坏)
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]);
关于如何修复它的任何建议?
答案 0 :(得分:0)
如果这是您的数据:
"Progressive Tax Ammount of brackets: 2 0.0 30000.0 0.0 45001.0 45000.0 0.2 "
然后String taxType = readtax.next();
将是“累进式”,String brackets = readtax.next();
将是“税收”。你应该从那里看到问题:)
使用调试器逐步调试代码也应该很明显。
答案 1 :(得分:0)
readtax.nextInt()
在它实际上应该是next()
的时候被提前调用,因为Ammount未能通过整数模式匹配。
尝试:"Progressive Tax 2 0.0 30000.0 0.0 45001.0 45000.0 0.2"
答案 2 :(得分:0)
我在测试代码时发现了InputMismatchException的两个不同原因:
1)正如其他人已经指出的那样,在第一个int之前你有太多的前导字符串。因此,将输入更改为只有两个符合预期。
2)在我的语言环境中,我有(逗号)代替。 (点)表示十进制值,因此Scanner使用“\\,”作为decimalSeparator,在解析输入时,它在nextDouble上因InputMismatchException而失败。我建议您检查您的语言环境以验证您的设置。
注意:一旦修复了这些点,代码仍然会失败(这次使用java.util.NoSuchElementException)所以我认为一旦你摆脱了InputMismatchException,你将不得不重新编写你的算法。