我只是想学习Java和#34;一个"我在代码中的错误是OutOfBounds-Error,但我不明白为什么。也许有人可以给我一个小小的暗示。
线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:450 在Salary.main(Salary.java:17)
public class Salary {
private static int taxClass;
public static void main(final String[] args) {
// list of salaries pre tax
int[] salariesPreTax = new int[] { 450, 800, 1235, 2200, 2458, 3125, 3300, 4100, 4278, 5001, 5222, 5783, 6100, 14750, 18875, 20470 };
double[] salariesAfterTax = new double [15];
for ( int i : salariesPreTax) {
int value = salariesPreTax[i];
salariesAfterTax[i] = calculateSalary(value, getTaxClass(value));
}
for (int i=0; i<salariesAfterTax.length; i++) {
System.out.println(" Salary after tax: " +salariesAfterTax[i] );
}
}
private static double calculateSalary(final int value, final int taxClass) {
double valueAfterTax = -1.0d;
switch (taxClass) {
case 1:
valueAfterTax = (value * 1);
break;
case 2:
valueAfterTax = (value * 0.945);
break;
case 3:
valueAfterTax = (value * 0.88);
break;
case 4:
valueAfterTax = (value * 0.82);
break;
case 5:
valueAfterTax = (value * 0.7975);
break;
case 6:
valueAfterTax = (value * 0.7425);
break;
case 7:
valueAfterTax = (value * 0.645);
break;
default:
valueAfterTax = (value * 0.985);
break;
}
return valueAfterTax;
}
private static int getTaxClass(final int salaryPreTax) {
if (salaryPreTax < 800) {
return 1;
}
if (salaryPreTax >= 800 && salaryPreTax < 1200) {
return 2;
}
if (salaryPreTax >= 1200 && salaryPreTax < 2100) {
return 3;
}
if (salaryPreTax >= 2100 && salaryPreTax < 3000) {
return 4;
}
if (salaryPreTax >= 3000 && salaryPreTax < 3800) {
return 5;
}
if (salaryPreTax >= 3800 && salaryPreTax < 5000) {
return 6;
}
if (salaryPreTax >= 5000) {
return 7;
}
return taxClass;
}
} // end class
答案 0 :(得分:5)
中的
Add ssh key
i
已经是数组元素的值,而不是数组的索引(您可以在异常中看到它,其中包含for ( int i : salariesPreTax) {
int value = salariesPreTax[i];
- 数组中的第一个值。)
因此,要迭代数组的值,您只需要:
450
但是,既然你也想修改数组,你需要索引,所以你应该使用常规for循环,迭代索引:
for (int value : salariesPreTax) {
...
答案 1 :(得分:1)
for(int i : you-array)
这已经返回一个值,所以不要试图从中提取任何值。
同样直接使用它:
... = CalculateSalary(i,....);
}