我得到了一个阵列。我需要从中获取最小值,然后返回值在数组中的位置。我是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 }));
提前感谢您的建议。
答案 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];
}