Подтвердить что ты не робот

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);
         }

        }        
    }
}
4b9b3361

Ответ 1

Он печатает номер каждый раз, когда он находит тот, который выше текущего 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);

Ответ 2

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

Способ 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);

}

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

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)); 

Ответ 3

Вам нужно распечатать 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);

Ответ 4

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

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);

Ответ 5

Если вы ищете самый быстрый и простой способ выполнять различные действия в отношении массивов, использование класса 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).

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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);

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

Ответ 9

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

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;
}

Ответ 10

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

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);
    }
}

Ответ 11

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);
}

Ответ 12

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

Arrays.sort(series1Numbers);

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

Ответ 13

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

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+"");
        }

Ответ 14

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

    }
}

Ответ 15

import java.util.*;
class main9 //Find the smallest and 2lagest and  ascending and descending order of  elements in array//
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter the array range");
        int no=sc.nextInt();
        System.out.println("Enter the array element");
        int a[]=new int[no];
        int i;
        for(i=0;i<no;i++)
        {
            a[i]=sc.nextInt();
        }
        Arrays.sort(a);
        int s=a[0];
        int l=a[a.length-1];
        int m=a[a.length-2];
        System.out.println("Smallest no is="+s);
        System.out.println("lagest 2 numbers are=");
        System.out.println(l);
        System.out.println(m);
        System.out.println("Array in ascending:");
        for(i=0;i<no;i++)
        {
            System.out.println(a[i]);
        }
        System.out.println("Array in descending:");
        for(i=a.length-1;i>=0;i--)
        {
            System.out.println(a[i]);
        }
    }
}