2009-11-27 2 views
17

Aus irgendeinem Grund druckt dieser Code drei Werte für den höchsten Wert im Array, wenn ich versuche, nur einen zu drucken (was 11,3 ist). Kann mir bitte jemand erklären, warum es das macht?Java: Den höchsten Wert in einem Array finden

Danke.

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

     }   
    } 
} 
+1

Collections.max (Arraylist) .toInt() –

Antwort

27

Es wird jedes Mal eine Zahl ausgedruckt, wenn eine höhere als die aktuelle Höchstzahl gefunden wird (was in Ihrem Fall dreimal vorkommt.) Verschieben Sie den Ausdruck außerhalb der for-Schleife und Sie sollten gut sein.

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

Sie müssen nach aus dem max drucken haben Sie alle von ihnen gescannt:

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

Sie haben Ihre print() Anweisung in der for() Schleife, sollte es nach so dass es nur einmal druckt. so wie es derzeit ist, druckt jedes Mal, wenn sich der Max ändert, ein max.

17

Um den höchsten (max) oder niedrigsten (min) Wert eines Arrays zu finden, könnte Ihnen dies die richtige Richtung geben. Hier ist ein Beispielcode zum Abrufen des höchsten Werts von einem primitiven Array. 1

Methode:

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

}

auf den niedrigsten Wert zu erhalten, können Sie

Collections.min(list)

Methode 2 verwenden:

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

Nun ist die folgende Zeile sollte funktionieren.

System.out.println("The highest maximum for the December is: " + maxValue(decMax));
+0

für Java 8, Verfahren 2 ist sehr praktisch. –

+0

Welcher ist gut leistungsmäßig? –

+0

Diese sind auch richtig und gute Lösung, aber nicht die effizienteste. Akzeptierte Antwort ist die ** effizienteste Möglichkeit, das höchste Element im Array zu finden. –

4

Wenn Sie den schnellste und einfachste Weg, um verschiedene Aktionen in Bezug auf Anordnungen auszuführen, die Verwendung der Klasse Collections ist äußerst hilfreich (Dokumentation von https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html verfügbar), reicht die aus der Suche nach der Maximal-, Minimal- , Sortieren, umgekehrter Reihenfolge, usw.

Ein einfacher Weg, um den maximalen Wert aus dem Array mit der Verwendung von Sammlungen zu finden:

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

Wenn Sie daran interessiert sind, den Minimalwert, ähnlich wie bei der Suche nach m finden aximale:

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

Die einfachste Linie die Liste zu sortieren:

Collections.sort(a); 

oder alternativ die Verwendung der Klasse Arrays ein Array zu sortieren:

Arrays.sort(decMax); 

Allerdings funktioniert die Klasse Arrays nicht habe eine Methode, die direkt auf den Maximalwert verweist, sie zu sortieren und sich auf den letzten Index zu beziehen ist der Maximalwert, aber beachte, dass die Sortierung nach den obigen 2 Methoden eine Komplexität von O (n log n) hat.

5

Gleiche wie von anderen vorgeschlagen, nur die sauberere Möglichkeit zu erwähnen, es zu tun:

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

Eine kürzere Lösung den max-Wert von Array haben:

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

können Sie eine Funktion verwenden, die akzeptiert ein Array und findet darin den Maximalwert. ich machte es generic so könnte es auch andere Datentypen akzeptieren

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

Sie können so schreiben.

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

Du Vergleichen nur nullte Element mit dem Rest der Elemente, so dass es zuletzt größten Wert, es enthält den Wert gedruckt wird, in Ihnen Fall wird gleiche Problem passiert. So vergleichen Sie jede und jedes Element müssen wir die Werte tauschen wie:

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

Hope this helfen Ihnen