Нахождение самого низкого значения в массиве
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, если вы действительно хотите.