1

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

}

4

4 回答 4

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;
}
于 2012-08-25T13:15:36.043 回答
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;
}
于 2012-08-25T13:12:36.093 回答
0

有多种方法可以做到这一点,但这是一种。公共静态 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;
                }
            }

}

于 2013-06-28T14:39:07.353 回答
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);  
        }   

    }
}
于 2015-08-14T05:26:50.897 回答