2016-03-20 10 views
0

Sadece Java öğrenmeye çalışıyorum ve koddaki "bir" hatamın bir OutOfBounds-Error olduğunu ama nedenini göremiyorum. Belki birisi bana bir litte ipucu verebilir. iplik "ana" java.lang.ArrayIndexOutOfBoundsException içindeArrayIndexOutOfBoundsException: 450 - Java

İstisna: Salary.main 450 (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 

cevap

4

i

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

zaten değerdir dizinin bir öğesinin değil, dizinin bir dizini (ve dizideki ilk değer olan 450'u içeren istisnada görebilirsiniz). Yani

dizinin değerlerinin üzerinde yineleme yapmak, tüm ihtiyaç vardır:

for (int value : salariesPreTax) { 
    ... 

Ancak, aynı zamanda diziyi değiştirmek istediğiniz beri döngü düzenleyicisi olan kullanmalısınız öyleyse,, endeksler gerek endeksleri üzerinde, hangi dolaşır:

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

Bu zaten bir değer döndürür, böylece ondan herhangi bir değeri çekmeye çalışmayın.

Doğrudan aynı şekilde kullanılır:

... = CalculateSalary(i,....); 
}