2015-07-19 3 views
0

У меня проблема с моим кодом, и кажется, что эта часть, по-видимому, вызывает его.Значение в индексе массива не соответствует индексу другого массива

Этот блок кода должен определить, есть ли у кого-нибудь бонус. Если их количество миль пролетает больше, чем средние мили, пролетая через все введенные (включая самих себя), тогда они имеют право на участие. Мой вопрос заключается в том, что я сравниваю каждое отдельное количество миль, прилетевших к среднему значению миль, правильно, поэтому, если количество миль, пройденных больше, чем среднее, то оно вернет список истинности, соответствующий каждому человеку.

Нормальный цикл:

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

вы можете добавить инструкцию 'break' после' result = true'; как обособленность. –

+0

Используйте обычный цикл [for] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html) вместо [расширенного цикла] (https://blogs.oracle.com/ CoreJavaTechTips/entry/usage_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

Смежные вопросы