使用Java中的数组更好的最小和最大算法

use*_*950 2 java algorithm

我试着写一个简单的max和min方法,正如我写的那样,我不能帮助它感觉它不应该是这么复杂.......我可能错了吗?我的最大代码就是这样,原谅我糟糕的伪代码:

用10个随机数填充数组.创建一个初始化为0的max变量,因为0是最低的最大值.将每个元素与max进行比较如果元素大于max,则将max的值替换为相关元素

我不喜欢我必须将max初始化为0的事实,我觉得可能有更好的方法呢?

我的min代码工作类似,除了I:比较我的min低于数组元素.如果元素较低,则替换min.

我真的不喜欢这个是我必须将我的min初始化为最大随机数,在这种情况下为50.

我的问题是:有更好的方法吗?有没有更有效的方法来编写这段代码?

import java.util.Random;

public class Main {

public static void main(String[] args) {

    //Declare min and max
    int max=0;
    int min;
    //Array of 10 spaces
    int[] ar=new int[10];
    //fill an array with random numbers between 0 and 50

    for(int i=0;i<10;i++)
    {
        ar[i]=new Random().nextInt(50);
    }

    //Test max algorithm
    //loop trough elements in array
    for(int i=0;i<10;i++)
    {
        //max is set to 0, there should always be a maximum of 0
        //If there isnt 0 will be the maximum

        //If element is greater then max
        //replace max with that element
        if(ar[i]>max)
        {
            max=ar[i];
        }
    }
    System.out.println("The max is "+ max);

    //Test min
    //Initialising min to maximum Random number possible?
    min=50;
    for(int i=0;i<10;i++)
    {
        if(ar[i]<min){
            min=ar[i];
        }
    }
    System.out.println("The min is "+min);


}
Run Code Online (Sandbox Code Playgroud)

}

Ale*_*der 5

您始终可以获取数组的第一个元素(即numbers[0])作为初始值,并从第二个元素开始循环.

int[] numbers = new int[10];
int max, min;
...
min = max = numbers[0];
for(int i = 1; i < numbers.length; ++i) {
    min = Math.min(min, numbers[i]);
    max = Math.max(max, numbers[i]);
}
Run Code Online (Sandbox Code Playgroud)

  • 除非数组是空的.我更喜欢以`min = Integer.MAX_VALUE`和`max = Integer.MIN_VALUE`开头. (4认同)

Axe*_*xel 5

好的,虽然其他人已经发布了答案,但我花时间将代码编辑成我认为更有用的代码.

  1. 制作静态方法.那些可以重复使用.
  2. 使用省略号(...),因为您可以像在代码中一样调用数组参数上的方法,也可以使用可变数量的参数调用min(5,3,8,4,1).
  3. 使用数据类型提供的最小/最大可能数字进行初始化
  4. 要检查代码是否有效,您必须先打印出数组中的项目,因为当您不知道其中包含的内容时,无法判断结果是否正确.
  5. 将您的代码基于标准库中的现有方法,因为已知这些方法经过全面测试并且有效工作(我知道,min/max看起来像一个太微不足道的例子).
  6. 除非你真的能证明你的代码存在性能问题,否则我不会过分担心性能问题.优先级应该更像第一正确性,第二可读性/可维护性,第三性能.

其他人已经提到了大部分内容,但无论如何,这里是代码:

import java.util.Random;

public class MinMax {

    public static int min(int... args) {
        int m = Integer.MAX_VALUE;
        for (int a : args) {
            m = Math.min(m, a);
        }
        return m;
    }

    public static int max(int... args) {
        int m = Integer.MIN_VALUE;
        for (int a : args) {
            m = Math.max(m, a);
        }
        return m;
    }

    public static void main(String[] args) {

        // fill an array with random numbers between 0 and 50
        int[] ar = new int[10];
        for (int i = 0; i < 10; i++)
        {
            ar[i] = new Random().nextInt(50);
            System.out.println(ar[i]);
        }

        int maxValue = max(ar);
        int minValue = min(ar);

        System.out.println("The max is " + maxValue);
        System.out.println("The min is " + minValue);
    }
}
Run Code Online (Sandbox Code Playgroud)