Java Stelle des Maximums im Int Array

Sneazel

Lt. Commander
🎅Rätsel-Elite ’24
Registriert
Aug. 2011
Beiträge
1.154
Hey, da ich nicht weiß, wo ich sonst fragen sollte, hier meine Frage
(btw es ist keine Hausaufgabe)

Also ich suche die Stelle an das Maximums eines Arrays steht
habe dafür int[] anzahl;

Nun sieht mein anzahl wie folgt aus:
5 2 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0
Habe ich an einer anderen Stelle gefüllt

Code:
int top() {
	int max = 0;		
	System.out.println("Max Vorher: "+max);
	for( int i=0; i < anzahl.length; i++) {
		if ( anzahl[i] >= max) {
			max = i;
		}
	}		
	System.out.println("Max nachher: "+max);
	return max;
}

Meine Ausgabe ist wie folgt:
Max Vorher: 0
Max nachher: 3
Warum 3?Oô
Was habe ich denn falsch gemacht?

Schon mal Danke für eure Hilfe
 
Da musst du schon vorher was mit dem Array falsch gemacht haben. Deine Funktion ist, so wie sie ist, korrekt.

Btw, suchst du nun den höchsten Wert oder die Stelle mit dem höchsten Wert im Array?
Dein Code zeigt ersteres, im Text redest du aber vom letzteren.
 
max ist dein Index im Array und diesen Index vergleichst du mit einem Wert im Array. Das kann nicht richtig sein.

Abgesehen davon findet die Funktion (sodenn sie dann korrigiert ist) das letzte Maximum im Array. Bist du sicher, dass du das möchtest?

Code:
int top() {
	int max = Integer.MIN_VALUE;
	int maxIndex = 0;
	System.out.println("Max Vorher: "+maxIndex);
	for( int i=0; i < anzahl.length; i++) {
		if ( anzahl[i] >= max) {
			max = anzahl[i]
			maxIndex = i;
		}
	}		
	System.out.println("Max nachher: "+maxIndex);
	return maxIndex;
}
Soll doch so aussehen oder? So jetzt aber, sorry für die vielen Edits.

Edit 137: Oh man, is das peinlich den Code so oft zu überarbeiten... sollte jetzt aber stimmen. Er sucht dir die Stelle (den Index) des höchsten Wertes heraus. Sollten zwei Werte gleich sein, wird (durch das >=) der hintere Index ausgegeben.
 
Zuletzt bearbeitet:
Jep, der Fehler ist in Zeile 6. (i durch anzahl ersetzen)
Als Bedingung würde ich auch nur > nehmen und nicht >=
 
Geh es doch mal durch:
Code:
i	anzahl[i]	max	| max_gesetzt
0	5		0	| 0
1	2		0	| 1
2	0		1	| 1
3	1		1	| 3
4	0		3	| 3
...
Also entweder
Code:
if( anzahl[i] >= max ) max = anzahl[i];
oder Wert/Index separat speichern. Aber nicht beides zusammen.
 
System.out.println("Max nachher: "+anzahl[max]);

Ein Array mit dem Namen "anzahl" kann ziemlich verwirren ;-)
 
@ sasdensas: Wenn er denn den Index speichern und mit diesem vergleichen würde. Er vergleicht aber den Wert und speichert den Index.
 
hab die Lösung gefunden (dank Yuuri - seine Veranschaulichung hats mir klar gemacht^^)
Danke trotzdem an alle

Das wäre der Code


Code:
int top() {
	int max = 0;		
	for( int i=0; i < anzahl.length; i++) {
		if ( anzahl[i] >= anzahl[max] ) { //hier war der Fehler
			max = i;
		}
	}		
	return max;
}
 
Zuletzt bearbeitet:
Ich habe meinen Post jetzt 100 Mal editiert. Sollte aber, wie der Kommentar drunter sagt, jetzt endgültig stimmen.
 
hätte max vllt MaxIndex wie Knight nennen sollen dann wäre es vllt verständlicher gewesen^^
 
Hehe. ;) Alternativ kannst du den Array mit sort() auch sortieren und dann einfach die letzte Position auslesen. Ist im Zweifel bei großen Arrays zwar mit O(n²) im Gegensatz zum einfachen Durchlaufen O(n) rechenintensiver, aber bei den meisten (schulischen, privaten) Anwendungenspielt das keine Rolle.
 
Wenn ich das ganze sortiere habe ich doch nur noch den Maximalen Wert aber nicht den vorheringen Index an dem der maximale Wert stand - aber genau den Index benötige ich ja
 
Ah sorry. Denkfehler! Da hast du natürlich Recht. :D
 
Hat immer noch einen Fehler: für ein leeres Array liefert die Funktion den nicht existenten Index 0.
 
Ich geb dir mal eine alternative Lösung die Helper Classen verwendet welche normal in der JDK drin sind. Gleich vorweg für das Problem ist es nicht so performant in der Regel wird man es so öfter gebrauchen können, da es auch mit beliebigen Objecten funktioniert wenn man einfach einen Comperator dazu implementiert. Des Weiteren kann man sich drauf verlassen das die Collections Classe funktioniert und sich kein Flüchtigkeitsfehler einschleicht.
Hab den Code jetzt nicht getestet sollte aber funktionieren.
(Wenn du den Index willst mach zahlenList.indexOf(max); )

Code:
try{
	Integer[] zahlen = {1,2,3,4};
	List<Integer> zahlenList = new ArrayList<Integer>();
	zahlenList.addAll(Arrays.asList(zahlen));
	Integer max = Collections.max(zahlenList);
} catch (NoSuchElementException e){
	
}
 
Steht doch da.

Ich zitiere mich mal selbst: Wenn du den Index willst mach zahlenList.indexOf(max);
 

Ähnliche Themen

Zurück
Oben