我的代码出现了问题,似乎这部分似乎造成了它。
public static boolean[] determine(double avgMilesFlown, double[] numMilesFlown, boolean[] bonusEligibility) {
boolean result = false;
for (double d : numMilesFlown) {
if (d > avgMilesFlown) {
result = true;
}
}
bonusEligibility = Arrays.copyOf(bonusEligibility, bonusEligibility.length + 1);
bonusEligibility[bonusEligibility.length - 1] = result;
return bonusEligibility;
}
这段代码应该决定某人是否获得奖金。如果他们飞行的里程数超过所有输入的平均里程数(包括他们自己),那么他们就有资格获得。我的问题是我将飞行的每个里程数与正确飞行的平均里程数进行比较,这样如果飞行的里程数大于平均值,那么它将返回一个与每个人相对应的真实列表。
正常循环:
for (int i = 0; i < numMilesFlown.length; i++) {
if (numMilesFlown[i] > avgMilesFlown) {
result = true;
}
}
输入/输出示例:
Names: [tim, jim]
Years Flown: [2, 2]
Miles flown: [45, 43]
Avg Miles: 44
Bonus: [515.00, 515.00]
只有蒂姆应该获得奖金,因为他的飞行里程大于平均值,但吉姆也获得了奖励,即使他的飞行里程低于平均值。
答案 0 :(得分:1)
result
一次只能保存一个值,所以一旦在for循环中设置为true,它将在整个方法中保持为真,并导致bonusEligibility[]
中的所有内容也被设置为真。
相反,您可以使用bonusEligibility[]
的相应值直接填充avgMilesFlown[]
。例如:
Arrays.fill(bonusEligibility, false);
for (int i = 0; i < numMilesFlown.length; i++) {
if (numMilesFlown[i] > avgMilesFlown) {
bonusEligibility[i] = true;
}
}