2016-03-20 3 views
0

Я просто пытаюсь изучить Java, и «одна» из моих ошибок в коде является OutOfBounds-Error, но я не понимаю почему. Может, кто-то может дать мне намек.ArrayIndexOutOfBoundsException: 450 - Java

Исключение в потоке "основного" 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 

ответ

4

i в

for (int i : salariesPreTax) { 
    int value = salariesPreTax[i]; 

уже значение элемента массива, а не индекс массива (и вы можете видеть, что в исключении, которое содержит 450 - первое значение в вашем массиве).

Так перебрать значение массива, все, что вам нужно:

for (int value : salariesPreTax) { 
    ... 

Однако, так как вы хотите изменить массив, вам нужны показатели, так что вы должны использовать обычный цикл , который перебирает по индексам:

for (int i = 0; i < salariesPreTax.length; i++) { 
    int value = salariesPreTax[i]; 
    salariesAfterTax[i] = calculateSalary(value, getTaxClass(value)); 
} 
0
for(int i : you-array) 

Это уже возвращает значение, так что не пытайтесь вытянуть любое значение из него.

Непосредственно использовать его также:

... = CalculateSalary(i,....); 
} 
Смежные вопросы