2016-03-20 9 views
0

私はちょうどJavaを学習しようとしています。コードの私の間違いのうちの1つは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

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

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,....); 
} 
関連する問題