Нахождение максимума и минимума в массиве, используя для циклов? - PullRequest
1 голос
/ 30 апреля 2019

Попытка найти мин / макс случайно сгенерированного массива в 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 ]

3 голосов
/ 30 апреля 2019

Из того, что я вижу, причина, по которой вы получаете 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 голос
/ 30 апреля 2019

Либо выполните присвоения массива перед инициализацией max и min; или, тем не менее, если вы хотите избежать этого дополнительного цикла, просто инициализируйте min в Double.MAX_VALUE, так как присвоение ему 0.0 (начальное значение элемента по умолчанию в двойном массиве) не будет удовлетворять условию if - любое случайное число больше или равно 1 всегда будет больше 0.

0 голосов
/ 30 апреля 2019

Довольно стандартный подход состоит в том, чтобы инициализировать минимальные / максимальные переменные значениями "наихудшего случая":

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

, что также решит вашу проблему, так как вы не сгенерируете никаких значений, таких как 0.0, который хранится в массиве во время доступа к нему для присвоения значений min и max.

Кроме того, в вашем цикле вы можете упростить это:

max = Math.max(max, array[i]);
min = Math.min(min, array[i]);
...