如何从Java中的数组返回一个位置

时间:2015-01-14 03:42:37

标签: java arrays

我得到了一个阵列。我需要从中获取最小值,然后返回值在数组中的位置。我是Java的新手,我只有Python的经验。到目前为止,这是我的代码。

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 }));

提前感谢您的建议。

5 个答案:

答案 0 :(得分: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;
     }

答案 1 :(得分:2)

您可以添加此方法并传入整数数组。它将返回数组中具有最小值的整数的索引位置。

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;
}

答案 2 :(得分:0)

你可以用流做到这一点:

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

答案 3 :(得分: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;
}

答案 4 :(得分:0)

假设一个非空数组,您可以先对列表进行排序,然后从排序列表中返回第一个。这不会像上面的一些例子那样有效,但代码会更短。

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