如何获得数组中的最小值

时间:2018-07-10 22:11:39

标签: java

int[] smallest = {4,5,1,3,7};
System.out.println(getMinimum(smallest));

public static int getMinimum(int[] a){
    int min = a[0];

    for (int i = 0; i <a.length; i++){
        if(a[i] < min){
            min = a[i];
        }

    }
    return min;
}

此(上方)有效,但此(下方)无效:

int[] smallest = {4,5,1,3,7};
System.out.println(getMinimum(smallest));

public static int getMinimum(int[] a){
    int min = 0;

    for (int i = 0; i <a.length; i++){
        if(a[i] < min){
            min = a[i];
        }

    }
    return min;
}

我不知道为什么,在最上面的示例getMinimum返回1,但是在最下面的示例getMinimum返回3?两者都在做同一件事,但一个是错误的,另一个是正确的吗?是因为我分配的最小值等于0吗?

4 个答案:

答案 0 :(得分:2)

在第二个示例中,您始终将其与a[0]进行比较,而不是与当前的最小值进行比较。结果,您得到的答案将始终是数组中的最后一个数字,该数字小于a[0]中的值(在您的情况下为3

如果您要对数组进行排序(正如问题的标题所暗示的那样),那么您可能打算在每次更新时将最小值放入a[0]中。这实际上并不能正确地对数组进行排序,但是会让您走上正确的轨道并解决比较问题

答案 1 :(得分:1)

rdowell的答案很好地解决了第二个版本的直接问题。

但是,在通过与min进行比较而不是始终为a[0]进行修复之后,您将遇到第二个问题。

如果将min设置为0,则不可能找到一个较低的值,至少不能找到示例中的正值。
使用a[0]初始化它会使用一个可能的值,而其他值可能会更低。
如果您不想使用第一个元素进行初始化,那么init可以高于任何值。 对于个位数的示例,“ 10”将是一个很好的值,那么第一个值已经较低,其他值也有机会。

答案 2 :(得分:0)

在第二个示例中,更改

if(a[i] < a[0])

if(a[i] < min)

那是识别力。将min设置为0或a [0]与您没有任何关系。特别是因为在第二个示例中,您甚至没有将a [i]与min进行比较。

答案 3 :(得分:0)

当您应该与先前的最小值进行比较时,始终会比较Array中的第一个值。第二个示例从不计算最小值,因为min设置为0,除非Array包含负值,否则min将保持为0。以下代码应该起作用:

public static int getMinimum(int[] a){
int min = a[0];

for (int i = 0; i <a.length; i++){
    if(a[i] < min){
        min = a[i];
    }

}
return min;
}