2.Grösster Wert Array

Blackmore84

Mitglied
Tag Zusammen, ich hab ein kleines Problem.
und zwar soll ich bei einem Array die zwei grössten Werte ausgeben lassen. (dies ohne spezielle Methoden, also "Handberechnung")
Das Maximum ist ja keine Sache, das ist einfach.
Aber wie komm ich auf den zweithöchsten Wert?

Das unten ist mein Ansatz. Ich weiss, dass ich irgendwie die elende 8 in die Variable max2 speichern muss.
Aber irgendwie komme ich immer auf denselben Wert wie max(also 12) oder auf -3 und das ist dann wohl vollkommen falsch.
Vielen Dank jetzt schon für die Hilfe.

Java:
public class Aufgabe2 {

	public static void main(String[] args) {
		 int[] arr = {3, 1, 5, 7, 4, 12, -3, 8, -2};
		
		    // Variablen für die zwei größten Elemente deklarieren und initialisieren
		 	int max = arr[0];
		 	int max2 = arr[0];

		    // die zwei größten Elemente berechnen
		    for ( int index=0 ; index < arr.length; index++)
		    {
		    	if(arr[index] > max )
		    	{
		    		max = arr[index];
		    		
		    	}
		    	if(max2 > arr[index] && max2 < max)
		    	{
		    		max2 = arr[index];
		    	}
		    	
		    	
		    	
		    	
		    }

		    // die zwei größten Elemente ausgeben
		    System.out.println("Das grösste: " + max + " das 2.Grösste: " + max2  );

	}

}
 

tribalup

Bekanntes Mitglied
Mach dir doch ein zweites Array in dem du alle Werte ausser dem größten speicherst und wiederhole den Vorgang. Oder du speicherst den ersten Wert in max, dann schauste ob der zweite größer als der erste ist.
Wenn ja speicher ihn in max, wenn nein dann in max2. Beime dritten kuckste ob größer max. Wenn nicht dann schau ob größer max2. Wenn ja dann ist es der neue max2 wenn nicht verwerfen und weiter.
 
Zuletzt bearbeitet:

tfa

Top Contributor
Wenn der aktuelle Wert x größer ist als der bisher größte, wird x der größte und der alte größte der neue zweitgrößte,
sonst, wenn x größer ist als der zweitgrößte, wird x der neue zweitgrößte.
 
G

Gast2

Gast
Die Bedingung bei max2 ist falsch.
Java:
if (max2 > arr[index] ...
=>
Java:
if (max2 < arr[index] ...

Etwas einfacher könntest du das so machen:
Array sortieren und die beiden ersten Werte auslesen.
 

pl4gu33

Top Contributor
Wenn der aktuelle Wert x größer ist als der bisher größte, wird x der größte und der alte größte der neue zweitgrößte,
sonst, wenn x größer ist als der zweitgrößte, wird x der neue zweitgrößte.

also je nach Aufgabenstellung kann der größte Wert ja auch doppelt vorkommen daher wäre bei der ersten Überprüfung größer/gleich auch möglich

und benutz else if, sparst dir damit die "2te Bedingung" im Vgl.
 
Zuletzt bearbeitet:

Blackmore84

Mitglied
Danke euch allen.

Habe das else if komplett ignoriert und nur mit if gearbeitet (wieso auch immer).
Aber irgendwie verwirren mich die Arrays noch ein klein wenig und ich denke immer irgendwie falsch bei den Dingern.
Na ja, üben üben üben!
 

pl4gu33

Top Contributor
achja noch was :D
initalisiere die beiden Variablen nicht mit dem ersten Wert im Array, weil wenn das der größte Wert ist, wird nix geändert und max und max2 sind bis zum Schluß auf dem größten Wert
 
Zuletzt bearbeitet:

Blackmore84

Mitglied
achja noch was :D
initalisiere die beiden Variablen nicht mit dem ersten Wert im Array, weil wenn das der größte Wert ist, wird nix geändert und max und max2 sind bis zum Schluß auf dem größten Wert

Aber habe ich dieses Problem nicht bei jedem wert mit dem ich initialisiere? Und wenn ich mit 0 initialisieren würde könnte es ja nur negative zahlen geben.

Oder meinst Du ich soll irgendeinen extrem tiefen wert nehmen?
 

pl4gu33

Top Contributor
also entweder prüft du direkt vor der Schleife:

Java:
if(arr[0]>=arr[1]){
        	   max = arr[0];
        	   max2 = arr[1];
         }else{
        	  max=arr[1];
        	  max2=arr[0];
           }

und fängst die Schleife dann ab dem zweiten Element an durchzulaufen....
oder du baust die Zuweisung mit in die Schleife ein, sodass die ersten beiden Werte als "Startwerte" je nach größe genommen werden und danach weiter verglichen wird.

weil wenn du irgendeinen Wert zuweist, kann es immer passieren, dass die Werte zu hoch sind und es im Array nur tiefere Werte gibt,... daher musst du dann schon 2 Elemente aus dem Array nehmen

[EDIT]oder Michaels Lösung weiter unten :p
das wäre wohl die Beste ohne viel drumrum ;) [/EDIT]
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Könnte man auch so machen:

Java:
public class Aufgabe2 {

    public static void main(String[] args) {
        int[] arr = {3, 1, 5, 7, 4, 12, -3, 8, -2};

        int maxIndex = 0;
        int max = Integer.MIN_VALUE;
        int max2 = Integer.MIN_VALUE;

        for (int i = 0; i < arr.length; i++) {
            if(arr[i] > max) {
                max = arr[i];
                maxIndex = i;
            }
        }
        
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] > max2 && i != maxIndex) {
                max2 = arr[i];
            }
        }

        // die zwei größten Elemente ausgeben
        System.out.println("Grösste Zahl: " + max + "\nZweitgrösste Zahl: " + max2);
    }
}
Voraussetzung: Es gibt keine Duplikate.
 
H

hüteüberhüte

Gast
Auch mal in die Trickkiste gegriffen:

Java:
        int[] a = {3, 1, 5, 7, 4, 12, -3, 8, -2};

        int index1 = 0;
        int max1 = Integer.MIN_VALUE;
        int max2 = Integer.MIN_VALUE;

        for (int i = 0; i < a.length; i++) {
            if (a[i] > max1) {
                index1 = i;
                max1 = a[i];
            }
        }

        a[index1] = a[index1] + a[0] - (a[0] = a[index1]);

        for (int i = 1; i < a.length; i++) {
            if (a[i] > max2) {
                max2 = a[i];
            }
        }

        a[index1] = a[index1] + a[0] - (a[0] = a[index1]);

        System.out.println("max1 = " + max1);
        System.out.println("max2 = " + max2);

Alternativ:

Java:
        int[] a = {3, 1, 5, 7, 4, 12, -3, 8, -2};

        int index1 = 0;
        int max1 = Integer.MIN_VALUE;
        int max2 = Integer.MIN_VALUE;

        for (int i = 0; i < a.length; i++) {
            if (a[i] > max1) {
                index1 = i;
                max1 = a[i];
            }
        }

        for (int i = 0; i < index1; i++) {
            if (a[i] > max2) {
                max2 = a[i];
            }
        }
        for (int i = index1 + 1; i < a.length; i++) {
            if (a[i] > max2) {
                max2 = a[i];
            }
        }

        System.out.println("max1 = " + max1);
        System.out.println("max2 = " + max2);

Edit: Oder du schleppst beide Werte mit:

Java:
        int[] a = {3, 1, 5, 7, 4, 12, -3, 8, -2};

        int max1 = Integer.MIN_VALUE;
        int max2 = Integer.MIN_VALUE;

        for (int i = 0; i < a.length; i++) {
            if (a[i] > max1) {
                max2 = max1;
                max1 = a[i];
            } else if (a[i] > max2) {
                max2 = a[i];
            }
        }

        System.out.println("max1 = " + max1);
        System.out.println("max2 = " + max2);

Das könnte allerdings zu Gehirnverwindungen führen, wenn man länger darüber nachdenkt...

[EDIT]Edit 2: Sei a der größte Wert. Entweder ist der Index des zweitgrößten Werts < i oder > i. Fall < i: Da max2=max1 ist max2 der zweitgrößte Wert. Fall > i: Da max2=a[x] ist max2 auch der zweitgrößte Wert[/EDIT]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Y grösster Wert von Array wiedergeben Java Basics - Anfänger-Themen 13
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
J Wert in Dropdown Menü kursiv schrieben Java Basics - Anfänger-Themen 19
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
G Input/Output getText() gibt keinen Wert! Java Basics - Anfänger-Themen 13
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
B Map<String, FilterMeta, wie Wert bekommen? Java Basics - Anfänger-Themen 4
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
1 Array nimmt falschen Wert auf! Java Basics - Anfänger-Themen 2
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
J Umwandlung String zu ASCII-Wert und anders Java Basics - Anfänger-Themen 17
P Verzweigungen Wert zurück geben Java Basics - Anfänger-Themen 2
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
F Boolean Methode Wert ausgeben. Java Basics - Anfänger-Themen 2
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
L Wert einer Webeseiteauslesen Java Basics - Anfänger-Themen 6
D Erste Schritte Wert im Array suchen Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
S Wert innerhalb eines anderen Wertes Java Basics - Anfänger-Themen 3
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
O Wert in einer Schleife unterschiedlich erhöhen Java Basics - Anfänger-Themen 2
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
F Java int-Wert wird resetet Java Basics - Anfänger-Themen 21
J Erste Schritte Wert aus JTextField zurückgeben Java Basics - Anfänger-Themen 6
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
J Wert bei Objekterzeugung verändern Java Basics - Anfänger-Themen 12
I bestimmten Wert eines Arrays Java Basics - Anfänger-Themen 23
D Erste Schritte Java speichert wert des Scanners nicht Java Basics - Anfänger-Themen 2
B Erste Schritte if Anweisung mit Wert Übernahme Java Basics - Anfänger-Themen 3
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
deatzi Wert aus anderer Klasse lesen Java Basics - Anfänger-Themen 7
D Compiler-Fehler Array an Methode übergeben und Wert zurückbekommen Java Basics - Anfänger-Themen 3
I Schleife fragt Wert ab bis 0 kommt (mit IO.java klasse) Java Basics - Anfänger-Themen 16
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37
S Wie erhöhe ich den Wert von mehren Integers auf einmal? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben