2015-12-11 3 views
1

Итак, вопрос состоял в том, чтобы вернуть разницу между максимальным числом и наименьшим. Мой первый код был написан.Не удалось прочитать вывод моего кода

public int bigDiff(int[] nums) { 
    int max = 0; 
    int min = 0; 
    for(int i = 0; i < nums.length; i++){ 
     if(Math.max(max, nums[i]) == nums[i]) 
      max = nums[i]; 
     else if (Math.min(min, nums[i]) == nums[i]) 
      min = nums[i]; 

    } 
    return max-min; 
} 

но это только выводит наибольшее количество в списке.

Хотя, когда я просто играл и изменил

int max = nums[0]; 
int min = nums[0]; 

он работал ?, но я понятия не имею, почему. Если бы кто-нибудь мог понять, как я буду благодарен за объяснение: D

ответ

-1

Когда вы просто играли и меняли int max = nums[0]; int min = nums[0];работал.

Потому что, если вы хотите, чтобы получить максимальную Num, вы должны позволить переменной max меньше всего члена arrary, то функция max() сделает max быть текущий максимальный номер.

Итак, переменная min должна быть больше, чем каждый член массива!

0

Представьте массив значений: 1,2,3. Правильный минус равен 1. Но вы инициализировали min до 0. Нет значения из этого массива меньше 0, поэтому min остается 0. Упс, ответ неверный. Аналогичный случай: массив из -1, -2, -3 и максимум, введенный в 0 - снова, неправильный результат.

Я знаю три стандартных подходов, чтобы исправить это:

  1. Максимальные и минимальные являются inited к первому значению последовательности (массив, в вашем случае). Именно так вы его исправили - установив nums [0]. OTOH вам не нужно начинать с индекса 0 - 1 тоже хорошо (очень небольшая оптимизация, но стоит отметить).
  2. Максимально допустимое значение с минимальным значением, когда-либо возможным для этого типа (для int, это INT_MIN), а минимальная - максимально возможная (INT_MAX, соответственно). Скорее всего, оба будут немедленно обновлены nums [0].
  3. Исследуется логическая переменная со значением «no values ​​yet», а вместо нее используется прямое присвоение вместо сравнения (в вашем случае с i == 0 и немедленно сбрасывается на false. Это определенно избыточный уровень для прямого доступного целого числа массив, но это хорош для громоздких ситуаций, когда сравнение находится внутри обратного вызова реализованного через вызывающую последовательность шаблона, или другую конструкцию слишком много-абстракцию уровней ...

Вы уже предупреждал, что else неправильно, но, математически, это разрешено для моих вариантов 1 и 3 (но не для варианта 2!), чтобы вы сами выяснили доказательство отказа.

+0

Thank вы: D 15 символов – memelord23

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