它返回数组中的第二个元素而不是最小数字的索引
我已经采用了大小和所有这些东西,这只是方法
public static int FindSmallest (int [] arr1){//start method
int index = arr1[0];
for (int i=1; i<arr1.length; i++){
if (arr1[i] > index ){
index = arr1[i];
}
return index ;
}
return 0;
}//end method
答案 0 :(得分:7)
你会在纸上做什么?
答案 1 :(得分:2)
public static int FindSmallest (int [] arr1) {
int index = 0;
int min = arr1[index];
for (int i=1; i<arr1.length; i++) {
...
if (arr1[i] < min) {
min = arr1[i];
index = i;
}
...
}
return index;
}
答案 2 :(得分:0)
Algorithm FindSmallest (arr1[])
// This Algorithm returns the index of smallest element in the array arr1
// Assumption : index of arr1 starts from 0
// arr1.length returns the length of arr1
begin
set index := 0;
set len := arr1.length;
set min := arr1[index];
For i:=1 to len,do
begin
if arr1[i] < min ,then
begin
min := arr1[i];
index := i;
end
end
return index;
end
答案 3 :(得分:-1)
你的问题就是你的回归。
有几件事:
数组不应该是静态的,你应该将它作为参数传递给arrayMin方法; min应该是一个本地arrayMin变量,而不是静态的; min应初始化为Integer.MAX_VALUE。如果用1初始化它,并且2恰好是数组的最小值,那么你永远不会返回它; 您不能从方法多次返回。一旦你返回min,方法就结束了。变量min可能存在一些混淆,将返回第一个i元素短语中的最小数字。这可能意味着在每次迭代中,变量min将具有(不返回)来自前i个元素的最小数字。
这是一个重构:
public static int arrayMin(int[] arr1) {
int i = 0;
int min = Integer.MAX_VALUE;
if (arr1 == null) {
return 0; // What if 0 is the minimum value? What do you want to do in this case?
} else {
while (i < arr1.length) {
if (arr1[i] < min) {
min = arr1[i];
}
i++;
}
}
return min;
}