2017-01-31 1 views
0

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

Решение:

public static int maxPos(int[] arr) { 
    int pos = 0; 
    if(arr.length > 0) { 
     for(int i = 0; i < arr.length; i++) { 
     if(arr[i] > arr[pos]) { 
     pos = i; 
    } else { 
    pos = - 1; 
    } 
} 
    return pos; 
} 

Я понимаю создание фиктивной переменной «поз», чтобы представить индекс позиции максимального значения массива. И имея контрольную точку с if (arr.length> 0), продолжайте. И для цикла для просеивания по всему массиву, проверяющему один за другим, индекс которого имеет наибольшее числовое значение и после каждой итерации либо переставляет фиктивную переменную, либо переносит дальше. Часть, где я теряюсь, - это использование вещей внутри массива [], это меня отбрасывает. Я не думаю, что нигде в java нет таких обозначений. Например, с arrayList не будет просто nameOfAL. получить(); Итак, эквивалент этого для массива использует []? Меня немного смущает arr [i]> arr [pos]. Можно ли сказать, что когда мы находимся в i-м индексе в цикле for, мы можем использовать arr [] и поместить что-то внутри этого поля, и когда мы это сделаем, выведем значение этого индекса. Итак, в любое время, когда мы помещаем что-то в этот массив, он всегда будет выводить позицию индекса? заключается в том, что цель помещать вещи в поле []? он выведет значение того, что помещено в его скобки. следующая часть, которая меня смущает, почему pos = i? Я понимаю, что если if-statement терпит неудачу, то else - 1. но зачем возвращать pos; после каждой итерации?

Спасибо

+2

Итак, ваш вопрос в том, что вы не понимаете обозначения для доступа к n-му элементу массива? См. [Этот учебник по Java] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html) – dramzy

+0

Я подозреваю, что возвращение должно находиться за закрывающей скобкой 'for'. –

+0

Вы пробовали этот метод? Это не работает. – Kahler

ответ

0

Опубликованная код содержит несколько ошибок, вы должны начать с pos на -1 (вместо сброса, когда заданное значение не больше, то текущий максимум). Кроме того, я бы посмотрел на null. Затем вы можете запустить свой цикл со вторым элементом. Нечто подобное,

public static int maxPos(int[] arr) { 
    int pos = -1; // <-- indicates no elements. 
    if (arr != null && arr.length > 0) { 
     pos = 0; // <-- there is at least one element. 
     for (int i = 1; i < arr.length; i++) { 
      if (arr[i] > arr[pos]) { 
       pos = i; // <-- update the max position 
      } 
     } 
    } 
    return pos; 
} 
+0

Спасибо! Почему мы должны начинать с 1, а не из 0 из индексов массива? почему -1 лучше всего использовать? все еще запутанный, когда использовать его и как я работаю. – jun

+0

Потому что '-1' должно быть возвращено, когда массив не имеет каких-либо элементов. Как только вы определите, что это так, вы можете * начать * с предположения, что первый элемент является наибольшим (а затем проверить, действительно ли второй и более на самом деле больше). –

0

Во-первых, так, что вы кладете в квадратные скобки являются переменными, названные i и pos, которые содержат значения числовых позиций вы обращаетесь в массиве. Это похоже на метод get класса arrayList.

Он не возвращает pos, пока он не закончит цикл for. В общем, он возвращает pos, потому что это индекс наибольшего числа, который является точкой программы. Я думаю, что вы где-то просто отсутствовали в скобках, у вас есть 5 { и 4 }.