数组索引中的值不对应于另一个数组的索引

问题描述:

我遇到了我的代码问题,看起来这部分似乎正在导致它。数组索引中的值不对应于另一个数组的索引

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循环:

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

*我将每个单独的飞行里程数与正确飞行的平均飞行里数进行比较*? JVM说什么? – CKing

+0

你可以在'result = true'后添加'break'语句;作为除了增强。 –

+0

使用正常[for](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html)循环代替[enhanced for loop](https://blogs.oracle.com/) CoreJavaTechTips/entry/using_enhanced_for_loops_with) –

result一次只能保存一个值,因此一旦它在for循环中设置为true,它将在整个方法中保持为真,并使bonusEligibility[]中的所有内容也都设置为true。

而是直接填写bonusEligibility[],其对应的值为avgMilesFlown[]。例如:

Arrays.fill(bonusEligibility, false); 

for (int i = 0; i < numMilesFlown.length; i++) { 
    if (numMilesFlown[i] > avgMilesFlown) { 
     bonusEligibility[i] = true; 
    } 
} 
+0

嗯,我看到你在哪里..取代做一个新的阵列,我可以只使用bonusEligibility []? – john

+0

好点,这将节省复制数组的额外步骤。 – deezy