这是过去一篇论文中的一个问题。我被要求创建一个静态方法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());
}
}
答案 0 :(得分:8)
有几件事:
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;
}
答案 1 :(得分:6)
您需要在循环外部使用名为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;
}
答案 2 :(得分:0)
有多种方法,但这里有一个。 public static int arrayMin(int [] arr){
boolean isFirstElement = true;
int smallestNumber= 0;
int index = 0;
while(index < arr.length) {
int temp= arr[index];
index++;
if (isFirstElement) {
smallestNumber = temp;
isFirstElement = false;
} else if (smallestNumber > temp) {
smallestNumber = temp;
}
}
}
答案 3 :(得分:0)
您可以使用索引变量来跟踪正命中数,如果相应的数字索引值是数组大小的一个,则该数字是最小的
class testtt{
static int small=0;
public static void main(String[] args) {
int arr[] = {9,2,3,4,5,6,7,8};
int i,index=0;
for(int q:arr)
{
for(i=0;i<arr.length;i++)
{
if(q<arr[i])
{
small=q;
index++;
}
}
if(index==arr.length-1)
System.out.println(small);
}
}
}