这是过去一篇论文中的一个问题.我被要求创建一个静态方法arrayMin来查找数组中的最小值arr.
我必须使用while循环,并且在每次迭代时,变量min将返回第一个i元素中的最小数字.
有没有办法在不调用另一个方法/ for循环和严格使用while循环的情况下执行此操作,因为问题仅值4%(包括编写循环不变量和javadoc).不确定我是否过度复杂化了问题.
public class Revision {
public static int arr[] = new int[] { 5, 8, 4, 3, 6, 2 };
public static int min = 1;
public static int arrayMin() {
int i = 0;
if (arr == null) {
return 0;
} else {
while (i < arr.length) {
// some function/method call to find smallest number of arr[i]
i++;
return min;
}
}
return min;
}
public static void main(String[] args) {
System.out.println(arrayMin());
}
Run Code Online (Sandbox Code Playgroud)
}
有几件事:
arrayMin方法;min应该是局部arrayMin变量,而不是静态变量;min应初始化为Integer.MAX_VALUE.如果用它初始化它1,2恰好是数组的最小值,你将永远不会返回它;return min,方法就结束了.变量min可能存在一些混淆,将返回第一个i元素短语中的最小数字.这可能意味着在每次迭代中,变量min将具有(不返回)第一个i元素中的最小数字.这是一个重构:
public static int arrayMin(int[] arr) {
int i = 0;
int min = Integer.MAX_VALUE;
if (arr == null) {
return 0; // What if 0 is the minimum value? What do you want to do in this case?
} else {
while (i < arr.length) {
if (arr[i] < min) {
min = arr[i];
}
i++;
}
}
return min;
}
Run Code Online (Sandbox Code Playgroud)
你需要在循环之外调用一个变量min.您将使用循环查找数组的最小值,并min在循环完成时返回.
} else {
int min = Integer.MAX_VALUE;
while(i < arr.length) {
// is arr[i] < min? If so, it's the new minimum
i++;
}
return min;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22207 次 |
| 最近记录: |