2015-07-19 58 views
0

我的计划的这部分似乎是给了我一个问题:为什么我所有的数组索引值设置为相同的值

public static double[] getBonusAmt(boolean[] bonusEligibility, int[] numYrsFlown, double[] bonusAmt) { 
     bonusAmt = new double[bonusEligibility.length]; 
     double bonus = 0; 
     for (boolean b : bonusEligibility) {  
     for (int i : numYrsFlown) {  
      if (i >= 9 && b == true) { 
       bonus = 2410.00; 
      } 
      else if (i < 9 && i >= 6 && b == true) { 
       bonus = 1206.00; 
      } 
      else if (i < 6 && i >= 2 && b == true) { 
       bonus = 515.00; 
      } 
      else if (i < 2 && b == true) { 
       bonus = 0.00; 
      }       
     } 
     }  
     return bonusAmt; 
    } 

输入/输出:

Name: [joe, james] 
Years flown: [2, 2] 
Miles flown: [45, 43] 
Average miles between pilots: 44 
Bonus eligibility: [true, false] 
Bonus amount: [0.00, 0.00] 

乔应该可以赚因为他飞行的飞行里数比平均值大,所以奖金是零。乔的预期奖金金额应该是515.00,因为一个,他有资格获得奖金和两个,只能飞行2年。

任何人都可以看到为什么奖金总额为零,即使我输入的飞行次数超过了平均值吗?

+0

你从未在'bonusAmt'的值。 –

回答

3

你的方法将值分配给所述bonus可变但返回bonusAmt变量,它从未分配,因此,其值保持0.0

你的嵌套循环没有多大意义。看起来你需要一个单一的规则for循环,假设bonusEligibility数组的第i个索引对应于numYrsFlown数组的第i个索引。

public static double[] getBonusAmt(boolean[] bonusEligibility, int[] numYrsFlown) { 
    double[] bonusAmt = new double[bonusEligibility.length];  
    for (int i = 0; i < bonusEligibility.length; i++) {   
     if (numYrsFlown[i] >= 9 && bonusEligibility[i]) { 
      bonus = 2410.00; 
     } 
     else if (numYrsFlown[i] < 9 && numYrsFlown[i] >= 6 && bonusEligibility[i]) { 
      bonusAmt[i] = 1206.00; 
     } 
     else if (numYrsFlown[i] < 6 && numYrsFlown[i] >= 2 && bonusEligibility[i]) { 
      bonusAmt[i] = 515.00; 
     } 
     else if (numYrsFlown[i] < 2 && bonusEligibility[i]) { 
      bonusAmt[i] = 0.00; 
     }       
    }  
    return bonusAmt; 
} 

顺便说一句,有一个在传递bonusAmt阵列作为参数传递给该方法是没有意义的,因为该方法分配给它一个新的数组的引用。

+0

啊,gotcha,谢谢! – john

0

您忘记将bonusAmt设置为所选的bonus值。

0

这是一个更加面向对象的方式来做你想做的事情。如伊兰的解决方案完美地解释你的错误无需接受这个答案...这是做的只是另一种方式......

public class MainApp { 

    public static void main(String[] args) { 
    AirMilesCustomer[] customers = new AirMilesCustomer[] { 
     new AirMilesCustomer("John", true, 2), 
     new AirMilesCustomer("Jane", true, 5), 
     new AirMilesCustomer("Sally", true, 7), 
     new AirMilesCustomer("Bill", false, 10), 
     new AirMilesCustomer("Stacy", true, 15) 
    }; 

    for(AirMilesCustomer customer : customers) { 
     System.out.println(customer); 
    } 
    } 
} 

class AirMilesCustomer { 
    private String _name; 
    private boolean _bonusEligibility; 
    private int _numYrsFlown; 

    public AirMilesCustomer(String name, boolean bonusEligibility, int numYrsFlown) { 
    _name = name; 
    _bonusEligibility = bonusEligibility; 
    _numYrsFlown = numYrsFlown; 
    } 

    public String getName() { 
    return _name; 
    } 

    public boolean isBonusEligibility() { 
    return _bonusEligibility; 
    } 

    public int getNumYrsFlown() { 
    return _numYrsFlown; 
    } 

    public double getBonusAmount() { 
    double bonus = 0.00; 

    if (_numYrsFlown >= 9 && _bonusEligibility) { 
     bonus = 2410.00; 
    } 
    else if (_numYrsFlown < 9 && _numYrsFlown >= 6 && _bonusEligibility) { 
     bonus = 1206.00; 
    } 
    else if (_numYrsFlown < 6 && _numYrsFlown >= 2 && _bonusEligibility) { 
     bonus = 515.00; 
    } 
    else if (_numYrsFlown < 2 && _bonusEligibility) { 
     bonus = 0.00; 
    } 
    return bonus; 
    } 

    public String toString() { 
    return "[" + _name + "][" + _numYrsFlown + "][" + _bonusEligibility + "][" + getBonusAmount() + "]"; 
    } 
} 
相关问题