我对返回数组中最小数字的索引位置有疑问。我从下面提供的5个答案中选出了3个答案。我认为其中之一可能是正确的。但是,我不太了解该代码,因此正在寻找解释它们如何工作的。
A
public int min(int[] a) {
int min = 0;
for (int i = 1; i < a.length; i++) {
if (a[i] < a[min]) {
min = i;
}
}
return a[i];
}
B
public int min(int[] a) {
int min = 0;
for (int i = 1; i < a.length; i++) {
if (a[i] < a[min]) {
min = i;
}
}
return i;
}
C
public int min(int[] a) {
int min = 0;
for (int i = 1; i < a.length; i++) {
if (a[i] < a[min]) {
min = i;
}
}
return min;
}
答案 0 :(得分:0)
第一个代码将给出错误(索引超出范围的异常),因为在for循环结束时,您的“ i”将等于数组的长度,并且您将返回a [i],因此此解决方案是完全错误的。第二个代码将返回数组的长度,因此这也是错误的解决方案。您输入的第三个代码将返回最小值的索引。因此解决方案是正确的。
答案 1 :(得分:0)
这很简单..您正在寻找最小索引。
想象一下a
数组有3个元素。
A
public int min(int[] a) {
int min = 0;
for (int i = 1; i < a.length, i++) {
if (a[i] < a[min]) {
min = i;
}
}
return a[i]; //returning value. Wrong!
//you are searching for the index, not value isnt' it?
}
B
public int min(int[] a) {
int min = 0;
for (int i = 1; i < a.length, i++) {
if (a[i] < a[min]) {
min = i;
}
}
return i; //returning i which only exist in for-loop scope. Wrong!
}
C
public int min(int[] a) { //assume a has 3 elements
int min = 0; //for storing smallest index
for (int i = 1; i < a.length, i++) { //loop index 1,2
if (a[i] < a[min]) { //if current array value < current smallest value
min = i; //store new found smallest index
}
}
return min; //returning min, the smallest index
}
如果min
没有通过循环更新,则意味着索引0(最小值的默认值)保持最小值。选项C将是正确的答案。