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
吗?
答案 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;
}