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

时间:2012-08-25 13:07:31

标签: 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());
}

}

4 个答案:

答案 0 :(得分:8)

有几件事:

  1. 数组不应该是静态的,您应该将其作为参数传递给arrayMin方法;
  2. min应该是本地arrayMin变量,而不是静态变量;
  3. min应初始化为Integer.MAX_VALUE。如果使用1对其进行初始化,并且2恰好是数组的最小值,那么您将永远不会返回它;
  4. 您无法多次从某个方法返回。只要执行return min,该方法就会结束。对于,可能会有一些混淆变量min将返回第一个i元素短语中的最小数字。这可能意味着在每个迭代中,变量min拥有(不返回)来自第一个i元素的最小数字。
  5. 这是一个重构:

    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);  
        }   

    }
}