Java,查找数组中的最小数字

nsc*_*010 1 java while-loop

这是过去一篇论文中的一个问题.我被要求创建一个静态方法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)

}

Joã*_*lva 8

有几件事:

  1. 数组不应该是静态的,你应该将它作为参数传递给arrayMin方法;
  2. min应该是局部arrayMin变量,而不是静态变量;
  3. min应初始化为Integer.MAX_VALUE.如果用它初始化它1,2恰好是数组的最小值,你将永远不会返回它;
  4. 您不能从方法多次返回.一旦你这样做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)


Jef*_*rey 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;
}
Run Code Online (Sandbox Code Playgroud)