Java: поиск наивысшего значения в массиве

По какой-то причине этот код печатает три значения для самого высокого значения в массиве, когда я пытаюсь напечатать только один (это 11.3). Может кто-нибудь, пожалуйста, объясните мне, почему это делается?

Благодарю.

import java.util.Scanner; public class Slide24 { public static void main (String [] args) { Scanner in = new Scanner(System.in); double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 3.5, 3, 1.1, 6.5, 5.1, -1.2, -5.1, 2, 5.2, 2.1}; double total = 0, avgMax = 0; for (int counter = 0; counter < decMax.length; counter++) { total += decMax[counter]; } avgMax = total / decMax.length; System.out.printf("%s %2.2f\n", "The average maximum temperature for December was: ", avgMax); //finds the highest value double max = decMax[0]; for (int counter = 1; counter  max) { max = decMax[counter]; System.out.println("The highest maximum for the December is: " + max); } } } } 

Он печатает номер каждый раз, когда он находит тот, который выше текущего максимума (который случается три раза в вашем случае.) Переместите печать за пределы цикла for, и вы должны быть хорошими.

 for (int counter = 1; counter < decMax.length; counter++) { if (decMax[counter] > max) { max = decMax[counter]; } } System.out.println("The highest maximum for the December is: " + max); 

Чтобы найти наивысшее (максимальное) или низкое (минимальное) значение из массива, это может дать вам правильное направление. Вот пример кода для получения наивысшего значения из примитивного массива.

Способ 1:

 public int maxValue(int array[]){ List list = new ArrayList(); for (int i = 0; i < array.length; i++) { list.add(array[i]); } return Collections.max(list); 

}

Чтобы получить самое низкое значение, вы можете использовать

  Collections.min (список) 

Способ 2:

 public int maxValue(int array[]){ int max = Arrays.stream(array).max().getAsInt(); return max; } 

Теперь должна работать следующая строка.

  System.out.println («Самый высокий максимум для декабря:« + maxValue (decMax)); 

Вам нужно распечатать max после того, как вы просмотрели все из них:

 for (int counter = 1; counter < decMax.length; counter++) { if (decMax[counter] > max) { max = decMax[counter]; // not here: System.out.println("The highest maximum for the December is: " + max); } } System.out.println("The highest maximum for the December is: " + max); 

То же, что предложено другими, просто упоминая более чистый способ сделать это:

 int max = decMax[0]; for(int i=1;i 

Если вы ищете самый быстрый и простой способ выполнения различных действий в отношении массивов, использование classа Collections чрезвычайно полезно (документация доступна на https://docs.oracle.com/javase/7/docs/api/ java / util / Collections.html ), действия варьируются от нахождения максимального, минимального, сортировочного, обратного порядка и т. д.

Простой способ найти максимальное значение из массива с использованием Коллекций:

 Double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 3.5, 3.0, 1.1, 6.5, 5.1, -1.2, -5.1, 2.0, 5.2, 2.1}; List a = new ArrayList(Arrays.asList(decMax)); System.out.println("The highest maximum for the December is: " + Collections.max(a)); 

Если вы заинтересованы в поиске минимального значения, похожее на поиск максимума:

 System.out.println(Collections.min(a)); 

Простейшая строка для сортировки списка:

 Collections.sort(a); 

Или, альтернативно, использование classа Arrays для сортировки массива:

 Arrays.sort(decMax); 

Однако class Arrays не имеет метода, который ссылается на максимальное значение напрямую, сортируя его и ссылаясь на последний индекс, является максимальным значением, однако имейте в виду, что сортировка по вышеуказанным 2 методам имеет сложность O (n log n) ,

У вас есть оператор print () в цикле for() , он должен быть после того, как он будет печататься только один раз. как это происходит в настоящее время, каждый раз, когда max изменяет, он печатает max .

Более короткое решение для максимального значения массива:

 double max = Arrays.stream(decMax).max(Double::compareTo).get(); 

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

 public static > T findMax(T[] array){ T max = array[0]; for(T data: array){ if(data.compareTo(max)>0) max =data; } return max; } 

Вы можете написать вот так.

 import java.util.Scanner; class BigNoArray{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("Enter how many array element"); int n=sc.nextInt(); int[] ar= new int[n]; System.out.println("enter "+n+" values"); for(int i=0;i 
 void FindMax() { int lessonNum; System.out.print("Enter your lesson numbers : "); lessonNum = input.nextInt(); int[] numbers = new int[lessonNum]; for (int i = 0; i < numbers.length; i++) { System.out.print("Please enter " + (i + 1) + " number : "); numbers[i] = input.nextInt(); } double max = numbers[0]; for (int i = 1; i < numbers.length; i++) { if (numbers[i] > max) { max = numbers[i]; } } System.out.println("Maximum number is : " + max); } 

Вы просто сравните нулевой элемент с остальными элементами, чтобы он напечатал значение последнего наибольшего значения, которое он будет содержать, в этом случае такая же проблема происходит. Чтобы сравнить каждый элемент, мы должны поменять значения:

 double max = decMax[0]; for (int counter = 1; counter < decMax.length; counter++){ if(max 

Надеюсь, что это поможет вам

Самый простой способ, который я нашел, поддерживает все версии Android

 Arrays.sort(series1Numbers); int maxSeries = Integer.parseInt(String.valueOf(series1Numbers[series1Numbers.length-1])); 

Простой способ без использования коллекций

 public void findHighestNoInArray() { int[] a = {1,2,6,8,9}; int large = a[0]; for(int num : a) { if(large < num) { large = num; } } System.out.println("Large number is "+large+""); } 

Если вы не хотите использовать какие-либо предопределенные библиотеки java, ниже

простейший путь

  public class Test { public static void main(String[] args) { double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 3.5, 3, 1.1, 6.5, 5.1, -1.2, -5.1, 2, 5.2, 2.1}; double maxx = decMax[0]; for (int i = 0; i < decMax.length; i++) { if (maxx < decMax[i]) { maxx = decMax[i]; } } System.out.println(maxx); } } 
  • Захват вывода поиска. -print0 в массив bash
  • Как суммировать массив целых чисел в C #
  • Словарь в Swift с Mutable Array как значение работает очень медленно? Как оптимизировать или построить правильно?
  • Получает массив байтов из ByteBuffer в java
  • Java Arrays.asList на примитивном типе массива создает неожиданный тип списка
  • Объявить постоянный массив
  • swift for loop: для индекса, элемента в массиве?
  • Передача 2D-массива функции C ++
  • jQuery .inArray () всегда верно?
  • Как разбить строку на пробел
  • JSON Array итерация в Android / Java
  • Давайте будем гением компьютера.