Нахождение самого низкого значения в массиве

int min = temperature[0];
//Here, i have initialized the minium array. 
else if(temperature[i] < min) {
            min = temperature[i];

И здесь я сравнил значения в массиве. Но так как инициализация min равна 0. Он будет все время иметь минимальное значение ноль. Как мне это исправить. Вот весь мой код

 int[] temperature = new int[12];
    Scanner kb = new Scanner(System.in);

    int min = temperature[0];
    int max = temperature[0];

    int counter = 0;
    for (int i = 0; i < temperature.length; i++) {
        System.out.println("Please enter the temperature:" + i);
        temperature[i] = kb.nextInt();
        counter += temperature[i];
        if (temperature[i] > max) {
            max = temperature[i];
        }
        else if(temperature[i] < min) {
            min = temperature[i];

        }
    }
    int average = counter / temperature.length;
    System.out.println("Displaying the average temperature:" + average);
    System.out.println("The lowest temperature is:" + min);
    System.out.println("The highest temperaature is:" + max);
    }
}

2 ответа

Удалить else, логически - если значение меньше текущего минимума, мы хотим обновить текущий минимум (независимо от состояния текущего максимума). На самом деле мы можем сделать это яснее, используя Math.max(int, int) а также Math.min(int, int), И мы не можем по умолчанию min а также max к начальным значениям, не прочитав ввод (если мы не используем однозначно абсурдные значения). Подобно,

int[] temperature = new int[12];
Scanner kb = new Scanner(System.in);

int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE, counter = 0;
for (int i = 0; i < temperature.length; i++) {
    System.out.println("Please enter the temperature:" + i);
    temperature[i] = kb.nextInt();
    counter += temperature[i];
    max = Math.max(max, temperature[i]);
    min = Math.min(min, temperature[i]);
}
int average = (int) (counter / (double) temperature.length);
System.out.println("Displaying the average temperature:" + average);
System.out.println("The lowest temperature is:" + min);
System.out.println("The highest temperaature is:" + max);

В противном случае вам нужно две петли. Наконец, обратите внимание, что вы использовали целочисленную математику в расчете average, Вы, вероятно, хотите математику с плавающей точкой.

Или, что еще лучше, используйте IntSummaryStatistics лайк

int[] temperature = new int[12];
Scanner kb = new Scanner(System.in);
for (int i = 0; i < temperature.length; i++) {
    System.out.println("Please enter the temperature:" + i);
    temperature[i] = kb.nextInt();
}
IntSummaryStatistics iss = IntStream.of(temperature).summaryStatistics();

System.out.println("Displaying the average temperature:" + iss.getAverage());
System.out.println("The lowest temperature is:" + iss.getMin());
System.out.println("The highest temperaature is:" + iss.getMax());
System.out.println("The total of all values is:" + iss.getSum());

Решение состоит в том, чтобы инициализировать min первым значением вашего массива, если массив имел хотя бы одно значение. Вы также можете установить его в Integer.MAX_VALUE, если вы действительно хотите.

Другие вопросы по тегам