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 < decMax.length; counter++)
        {
         if (decMax[counter] > max)
         {
          max = decMax[counter];
          System.out.println("The highest maximum for the December is: " + max);
         }

        }        
    }
}

person HelloWorld    schedule 27.11.2009    source источник
comment
Коллекции.max(arrayList).toInt()   -  person Amit Vaghela    schedule 05.12.2017


Ответы (15)


Он печатает число каждый раз, когда находит число, превышающее текущий максимум (что в вашем случае происходит три раза). Переместите печать за пределы цикла 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);
person Toji    schedule 27.11.2009

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

Способ 1:

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

}

To get the lowest value, you can use

Collections.min(list)

Способ 2:

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

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

System.out.println("The highest maximum for the December is: " + maxValue(decMax)); 
person sifho    schedule 18.09.2015
comment
Для Java 8 метод 2 очень удобен. - person Jingguo Yao; 02.01.2017
comment
Это тоже правильное и хорошее решение, но не самое эффективное. Принятый ответ — это наиболее эффективный способ найти самый высокий элемент в массиве. - person Ashish Kumar; 03.02.2017

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

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);
person Michael Haren    schedule 27.11.2009

Если вы ищете самый быстрый и простой способ выполнения различных действий с массивами, чрезвычайно полезным будет использование класса 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<Double> a = new ArrayList<Double>(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);

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

Arrays.sort(decMax);

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

person christylam1    schedule 01.05.2016

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

int max = decMax[0];
for(int i=1;i<decMax.length;i++)
    max = Math.max(decMax[i],max);
System.out.println("The Maximum value is : " + max);
person Sahil Chhabra    schedule 26.09.2016

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

double max = Arrays.stream(decMax).max(Double::compareTo).get();
person freedev    schedule 06.02.2017

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

person twolfe18    schedule 27.11.2009

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

double max = decMax[0];
    for (int counter = 1; counter < decMax.length; counter++){
        if(max<decMax[i]){
            max=decMax[i]; //swapping
            decMax[i]=decMax[0];
        }
    }
    System.out.println("The max value is "+ max);

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

person Ijhar Ansari    schedule 28.01.2018

Если вы не хотите использовать какие-либо предопределенные библиотеки 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);

    }
}
person Java Strikers    schedule 21.07.2018

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

public static <T extends Comparable<T>> T findMax(T[] array){       
    T max = array[0];
    for(T data: array){
        if(data.compareTo(max)>0)
            max =data;                
    }
    return max;
}
person Shimrod    schedule 07.02.2017

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

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<ar.length;i++){
            ar[i]=sc.nextInt();
        }
        int fbig=ar[0];
        int sbig=ar[1];
        int tbig=ar[3];
            for(int i=1;i<ar.length;i++){
                if(fbig<ar[i]){
                    sbig=fbig;
                    fbig=ar[i];
                }
                else if(sbig<ar[i]&&ar[i]!=fbig){
                    sbig=ar[i];
                }
                else if(tbig<ar[i]&&ar[i]!=fbig){
                    tbig=ar[i];
                }
            }
        System.out.println("first big number is "+fbig);
        System.out.println("second big number is "+sbig);
        System.out.println("third big number is "+tbig);
    }
}
person Vivek Shah    schedule 23.09.2017

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

Arrays.sort(series1Numbers);

int maxSeries = Integer.parseInt(String.valueOf(series1Numbers[series1Numbers.length-1]));
person Amir Dora.    schedule 12.05.2018

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

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+"");
        }
person arunkumar sambu    schedule 18.07.2018

простой способ найти максимальное число

   int arr[] = {10, 11, 12, 13, 55, 18, 20};
    int num = arr.length;
    int max = 0;

    for (int i = 0; i < num; i++) {
        if (arr[i] > max) {
            max = arr[i];

        }

    }
    System.out.println(max);
person dammika rajapaksha    schedule 06.05.2021
comment
Хотя этот фрагмент кода может решить проблему, он не объясняет, почему и как отвечает на вопрос. Пожалуйста, включите объяснение вашего кода, так как это действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для будущих читателей, и эти люди могут не знать причин вашего предложения кода. Вы можете использовать кнопку редактировать, чтобы улучшить этот ответ, чтобы получить больше голосов и репутацию! - person Brian Tompsett - 汤莱恩; 06.05.2021

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

Источник: Программа Java для поиска наибольшего элемента массива

Метод 1: использование итерационных способов

В этом примере мы возьмем переменную max и назначим ей первый элемент массива. Теперь мы будем перебирать массив, если какой-либо элемент больше максимального максимального элемента, а затем назначать его самому большому элементу, в противном случае переходим к следующей итерации.

int largest = arr[0];
for(int i = 1 ; i < arr.length; i++){
if( largest < arr[i]){
largest = arr[i];
}
}

Метод 2: использование потоков Java8

Мы можем получить наибольший массив формы элемента, используя метод max потока, как показано ниже в примере кода.

        int max = Arrays.stream(arr).max().getAsInt();

Способ 3. Использование массивов

В этом примере с помощью массива мы сортируем массив сначала в порядке возрастания, затем мы возвращаем последний элемент из массива

public static int getLargestElement(int [] arr){
        Arrays.sort(arr);
        return arr[arr.length-1];
    } 
person Anuj Dhiman    schedule 18.06.2021