Подойдут небольшие изменения в вашем коде (с некоторыми изменениями в названии var):
double sum = 0; //average will have decimal point
for(int i=0; i < args.length; i++){
//parse string to double, note that this might fail if you encounter a non-numeric string
//Note that we could also do Integer.valueOf( args[i] ) but this is more flexible
sum += Double.valueOf( args[i] );
}
double average = sum/args.length;
System.out.println(average );
Обратите внимание, что цикл также можно упростить:
for(String arg : args){
sum += Double.valueOf( arg );
}
Edit: OP, кажется, хочет использовать массив args
. Похоже, это массив строк, поэтому он соответствующим образом обновил ответ.
Обновление :
Как правильно заметил zoxqoj, переполнение целых чисел / двойное не учтено в приведенном выше коде. Хотя я предполагаю, что входные значения будут достаточно малы, чтобы не иметь такой проблемы, вот фрагмент, который нужно использовать для действительно больших входных значений:
BigDecimal sum = BigDecimal.ZERO;
for(String arg : args){
sum = sum.add( new BigDecimal( arg ) );
}
Этот подход имеет несколько преимуществ (хотя он и несколько медленнее, поэтому не используйте его для операций, критичных ко времени):
- Точность сохраняется, с удвоением вы постепенно потеряете точность с количеством математических операций (или не получите точную точность вообще, в зависимости от чисел)
- Вероятность переполнения практически исключена. Тем не менее, обратите внимание, что
BigDecimal
может быть больше, чем у double
или long
.