2015-04-06 2 views
0

Я новичок в java ... if, за которым следуют инструкции else, если выражения вычисляются так, пока не будет найдено значение, которое оценивает true, и я видел много примеров этого. Но в этой программе оба утверждения (if и else if) оцениваются. Зачем?Else if statements

public int centeredAverage(int[] nums) { 

    int[] nums = {1, 1, 5, 5, 10, 8, 7}; 

    int sum = 0; 
    int centered = 0; 
    int min = nums[0]; 
    int max = nums[0]; 
    int i = 0; 

    for (i = 0; i < nums.length; i++){ 
     if (nums[i] < min){ 
      min = nums[i]; 
     } else if (nums[i] > max){ 
      max = nums[i]; 
     } 
     sum += nums[i]; 
     centered = ((sum-max-min)/(nums.length-2)); 
    } 

    return centered; 
} 
+0

Его всегда выпускают еще блок. не так? – Pratik

+0

Ничего особенного. Я просто пытаюсь полностью понять, как работают if и else if, написав много разных кодов. Итак, вы говорите, что после оценки «if» будет всегда оцениваться «else if»? Благодаря! –

+0

Не похоже, что будут оцениваться как 'if', так и' else'. Можете ли вы дать нам некоторый результат? –

ответ

3

Поскольку они в цикле, который изменяет i и поэтому изменения nums[i] и так меняется, что if «s истинны.

0

Ваше прохождение в массиве двойников по ссылке nums и определение массива с тем же именем в методе, который кажется нечетным. Также ваш индекс начала для вашего цикла for должен быть 1

+0

Начальный индекс должен быть нулевым, а не 1. Это Java. –

+0

Я верю, что dmonarch предлагает оптимизацию, так как min и nums [0] начинают то же самое. Это неправильно, потому что это не то, чтобы смутить программиста-новичка. :) Он прав насчет имени 'nums'. Вы не даете своим детям то же имя по какой-то причине. – CandiedOrange

-1

Работа оператора If, за которым следует else-if, здесь хорошо. Мы получаем ожидаемый результат здесь. Оба оператора if и else-if не выполняются. Выполняется только этот оператор, который имеет значение TRUE в соответствии с логикой. Здесь мы можем определить работу программы с помощью «System.out.println». Код и консольный выход приведены ниже ...

int[] nums = {1, 1, 5, 5, 10, 8, 7}; 

    int sum = 0; 
    int centered = 0; 
    int min = nums[0]; 
    int max = nums[0]; 
    int i = 0; 

    for (i = 0; i < nums.length; i++) 
    { 
     if (nums[i] > min) 
     { 
      min = nums[i]; 

      System.out.println("inside first if: " + i); 
      // taking value of i in SOP to get the iteration value 

     } 
     else if (nums[i] > max) 
     { 
      max = nums[i]; 
     } 

     sum += nums[i]; 
     centered = ((sum-max-min)/(nums.length-2)); 

     System.out.println("inside else if: " + i); 
     // taking value of i in SOP to get the iteration value 

    } 

    System.out.println("centered value " 
      + " " + centered); 

Вы можете эффективно использовать SOP в каждой программе, чтобы получить заказ на выполнение.

0
Im guessing this is the same problem from codingbat, next time copy and paste the problem desciption for others! 

public int centeredAverage(int[] nums) { 
     Arrays.sort(nums); //sorts the array smallest to biggest 
     int total = 0; 
     //nums is already sorted, so the smallest value is at spot 0 
     //and the biggest value is at the end. 
     for(int a = 1; a < nums.length - 1; a++){ //avoid the first and last numbers 
     total += nums[a]; 
     } 
     return total/(nums.length - 2); //need () so we can substract 2 first 

     //Another way could simply sum all the elements then subtract from that sum 
     //the biggest and smallest numbers in the array, then divide by nums.length- 2, it is a 
     //little more complex, but allows a for : each loop. 
    } 

But for you, well since you are a beginner, restate your strategy (algorithm), find the smallest and biggest numbers in the array, subtract that out of the sum of all elements in the array then divide that number by nums.length - 2, since we are ignoring 2 numbers.