2015-01-14 5 views
0

Мне присвоен массив. Мне нужно получить минимальное значение от него, а затем вернуть значение в массив. Я новичок в Java, и у меня только есть опыт работы на Python. Вот мой код до сих пор.как вернуть позицию из массива в Java

public static int minPosition (int[] list) { 
    int currMin = list[0]; 
    int index = list.length-1; 
    int currPos = 0; 

    while (index >= 0){ 
     if (currMin > list[index]) 
      currMin = list[index]; 
     if (currMin > list[index]) 
      currPos = index; 

     index--; 

    } 
    return currPos; 
} 

Это мои массивы, которые вызываются автоматически.

minPosition(new int[] { -7 })); 
minPosition(new int[] { 1, -4, -7, 7, 8, 11 })); 
minPosition(new int[] { -13, -4, -7, 7, 8, 11 })); 
minPosition(new int[] { 1, -4, -7, 7, 8, 11, -9 })); 

Благодарим вас за консультацию.

ответ

3
if (currMin > list[index]) 
     currMin = list[index]; 
    if (currMin > list[index]) 
     currPos = index; 

Если первое if условие истинно, то к тому времени, второе условие проверяется, curMin будет точно равна list[index], поэтому он не будет никогда быть больше, чем ...

Вы может потребоваться

 if (currMin > list[index]) { 
     currMin = list[index]; 
     currPos = index; 
    } 
+0

Не обращайте внимания, что вы были правы. У меня была небольшая ошибка в моем коде. Большое спасибо! – cmsp

1

Вы можете добавить этот метод и передать его в целочисленном массиве. Он вернет позицию индекса целого числа с наименьшим значением в массиве.

public static int getMinIndex(int[] array) { 
    int minIndex = -1; 
    int currentMinValue = Integer.MAX_VALUE; 
    for(int i =0; i< array.length; i++) { 
     if(array[i] < currentMinValue) { 
      minIndex = i; 
      currentMinValue = array[i]; 
     } 
    } 
    return minIndex; 
} 
0

Вы можете сделать это с потоками:

IntStream(0, list.length).min((i1, i2) -> list[i1] - list[i2]).get(); 
0

Это решение не требует отслеживания текущего минимума. Это упрощает выполнение кода и оставляет меньше места для ошибок. Он также начинает поиск с самого начала, который ваш исходный код не делает. (Я не знаю, почему это так, так как вы предположительно хотите первый индекс, который имеет минимальное значение, а не в последнюю очередь.)

public static int minPosition (int[] list) { 
    if(list == null || list.length = 0){ 
    return -1; 
    } 

    int minPos = 0; 

    for(int i = 0; i < list.length; i++){ 
    if(list[i] < list[minPos]){ 
     minPos = i; 
    } 
    } 
    return minPos; 
} 
+0

Вопрос от недостаточно осведомленного человека. Не было бы быстрее хранить значение minimun для переменной вместо того, чтобы обращаться к ней на каждой итерации с помощью 'list [minPos]'? – Reti43

+0

@ Reti43 Это быстрее, но индексирование массива произойдет в O (1) раз, то есть независимо от того, насколько велик массив, он всегда будет занимать одинаковое количество времени. Благодаря чистой скорости вычислений сегодня я предпочитаю точность для улучшения предельной скорости. –

0

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

public static int minPosition (int[] list) { 
     Arrays.sort(list); 
     return list[0]; 
} 
+1

Вопрос задает позицию минимального значения, а не значение. Вы можете переписать свой ответ, хотя, как 'return new ArrayList (list) .indexOf (list [0]);'. –

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