Его цель - быть 0, чтобы его можно было проверить по количеству элементов в массиве, чтобы получить либо -1, либо наибольшее число;
Ноль не требуетсяname - если вы имеете в виду 0, используйте литерал 0
.
Ваш цикл в порядке.Есть вещи, которые вы можете сделать, чтобы попытаться оптимизировать его, но они не обязательно помогут.Почти всегда вы можете просто оставить такую локализованную оптимизацию «замочной скважины» для JIT.Если вы просто хотите попробовать несколько вещей в качестве учебного упражнения, то вы можете поэкспериментировать следующим образом:
- вместо того, чтобы дважды использовать массив, установить переменную в значение массива, а затем использовать его дважды.
- разверните цикл на разные суммы.Будьте осторожны, чтобы не ошибиться при доступе к неправильным индексам, если
numElem
не кратно числу раз, которое вы разворачиваете. - работает в обратном направлении через массив, а не вперед
- немедленно вернитесь, если вы встретите значение
Integer.MAX_VALUE
.Вы не найдете ничего большего.Трудно определить эффект производительности на этом, так как это ускорит его для больших массивов с MAX_VALUE, который не слишком близок к концу, но, скорее всего, замедлит его для всего остального.Возможно, было бы интересно узнать, насколько это важно. - все, что вы можете придумать.
Я не говорю, что что-то из этого будет иметь значение, быстрееили медленнее, но они могли.Так что беги их и время, как быстро каждый идет.Скорее всего, вы узнаете, что по сравнению с передачей в JIT этот материал не стоит вашего времени.Но вы никогда не знаете; -)
Окружающий код может быть очищен, однако, чтобы сделать его более понятным, а не сделать его быстрее.Например:
public int getMax() {
int max = -1;
if (nElems > 0) {
max = array[0];
for(int j=1; j<nElems; j++) {
if(max < array[j])
max = array[j];
}
}
return max;
}
Это также устраняет ошибку в вашем коде: если массив имеет размер 0, вы получаете доступ за пределами второй строки.Способ ColinD сделать это так же хорошо, я показываю что-то другое для разнообразия.
Вот более короткий код, предполагая, что все значения неотрицательны:
public int getMax() {
int max = -1;
for(int j=0; j<nElems; j++) {
if(max < array[j])
max = array[j];
}
return max;
}