java,查找数组中的最小数

ryoqjall  于 2021-07-09  发布在  Java
关注(0)|答案(4)|浏览(297)

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

xuo3flqw1#

有多种方法,但这里有一种。公共静态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;
                }
            }

}

vecaoik1

vecaoik12#

可以使用索引变量跟踪正命中数,如果相应的数字索引值比数组大小小一个,则该数字是最小的

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

    }
}
n3h0vuf2

n3h0vuf23#

有几件事:
数组不应该是静态的,应该将它作为参数传递给 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;
}
li9yvcax

li9yvcax4#

您需要在循环外部有一个名为 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;
}

相关问题