在使用for循环的数组中查找最大值和最小值?

时间:2019-04-30 01:18:35

标签: java arrays for-loop max min

尝试在Java中查找随机生成的数组的最小值/最大值。我的代码正在寻找最大值,但是我不确定为什么当我尝试运行它时,每次都会将最小值变为0.0。

public static void main(String[] args) {
    double array1[] = new double [10];
    int n = array1.length;
    double max = array1[0];
    double min = array1[1];

    System.out.println("Array: ");

    for (int i=0; i<n; i++) {
        array1[i] = Math.floor((Math.random() * 100) + 1);
        System.out.print(array1[i]+ " | " );
        if (array1[i] > max) {
             max = array1[i];
        } 
        if (min > array1[i]) {
             min = array1[i];


            }

        }

 }

3 个答案:

答案 0 :(得分:3)

从我看到的结果中,最小值得到0.0的原因是它是空数组中元素的默认值,因此当您尝试比较整个随机生成的数组(最小值仅为1)时, min变量内的值将永远不会更新。尽管尚未初始化数组中的元素,但您已经将min分配为数组的第二个元素。尝试在比较循环之前处理的其他循环中初始化数组,或者将min变量指定为随机生成器的最大值,然后它可能会运行平稳。

for(int i= 0;i<n;i++)
   array1[i] = Math.floor((Math.random() * 100) + 1);
max = array[0];
min = array[0];
for(int i = 1;i<n;i++)
{
  System.out.print(array1[i]+ " | " );
  //continue ...
}

或者这个

min = 100;
max = 1;
for(int i = 0; i<n;i++)
{
   //continue ...
}

答案 1 :(得分:1)

在初始化max和min之前先进行数组分配;或者,但是,如果要避免该额外的循环,只需将min初始化为Double.MAX_VALUE,因为将其分配给0.0(双精度数组中元素的默认初始值)将不满足if条件-任何大于或等于的随机数1始终大于0。

答案 2 :(得分:0)

一种相当标准的方法是使用“最坏情况”值初始化最小/最大变量:

double max = Double.MIN_VALUE;
double min = Double.MAX_VALUE;

这也将解决您的问题,因为您将不会生成任何低至0.0的值,这是在访问数组时将其分配给min和{的值{1}}。

此外,您可以在循环中简化为:

max