ArrayIndexOutOfBoundsException:450 - Java

时间:2016-03-20 09:47:03

标签: java

我只是想学习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

2 个答案:

答案 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,....);
}