2015-07-19 79 views
0

我遇到了我的代碼問題,看起來這部分似乎正在導致它。數組索引中的值不對應於另一個數組的索引

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) –

回答

1

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