在简单问题中使用数组的最小值

use of minimum values with array's in simple problems

我正在学习 Java,作为我工作的一部分,我需要能够执行一些操作,例如计算数组中值的范围 (max - min + 1)。我不允许使用 collections.min(array) 之类的方法。到目前为止,我的解决方案是这样的:

public static int range(int[] data){
int min = 99999999;
int max = 0; 
int test = 0;
int range = 0;
for (int i = 0; i < data.length; i++){
     test = data[i];

     if (test > max)
         max = test;
     if (test < min) 
         min = test;
}
range = (max - min) + 1;
return range; 

}

虽然它对他们有用,但并不是特别优雅。最小值为 9999999 是可行的,但如果我最终在使用大于该值的数字时遇到问题,它就不起作用。

我觉得应该有更好的解决方案,但我没有看到在不将 int min 设置为非常高的值的情况下找到最小值的方法。否则数组可能有非常大的数字,并且最小值永远不会改变,因为数组中的值总是大于它。

此方法 returns 至少一个元素的所有非空数组的范围,否则它会抛出一个 IllegalArgumentException。这是通过 max >= min 的健全性检查完成的,如果 minmax 的原始初始化值不变,则只有 true。这只有在 for 循环被跳过时才会发生,这只发生在 null 或空数组上。如果数组包含任何有效的 int,即使是 Integer.MAX_VALUEInteger.MIN_VALUE,此完整性检查也会成功。

public static int range(int[] list){

    int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE;

    for(int i = 0; list != null && i < list.length; i++){
        int current = list[i];

        if(current > max){
             max = current;
        }

        if(current < min){
             min = current;
        }
    }

    if(max >= min){
        return max-min+1;
    }
    else throw IllegalArgumentException("Zero-length and null arrays have an undefined range!");
}