Erste Schritte "return" Problem bei Rekursion

kritrat

Mitglied
Hallo zusammen,

ich versuche mich nun seit ein paar Wochen in Java.
Nun versuche ich aus einer gegebenen Liste das k-t größte Element zu finden, OHNE diese vorher zu sortieren...

Mein Denkansatz war das:

Java:
	public static int select( int [] A, int k, int index, int zaehler) {  //beim Aufruf muss index = A.length und zaehler = 0 sein.
		if ( k > A.length)
			return;									//an dieser Stelle soll das Programm abbrechen...?
		if (k > 0){
			int n = A.length;
			int [] TMP = new int [n-1];
			int ind = 0;
			int max = A[ind];
			k--;					// k wird bei jedem jekursiven Aufruf verkleinert. Ist k = 0, so habe ich das k-t größte Element gefunden.
			for (int i = 1; i < n; i++) {
				if (A[i] > max) {
					max = A[i];
					ind = i;
				}			
			}
			for (int x = 0; x < ind; x++)		// hier wird die alte Liste in eine neue kopiert, das bisher größte Element wird dabei ausgelassen
				TMP[x] = A[x];
			for (ind++; ind < n; ind++)
				TMP[ind] = A[ind];
			if (ind < index)
				select(TMP, k, ind, zaehler);
			else {
				zaehler++;				// zaehler soll sicherstellen, dass der Index nicht durch den rekursiven aufruf verfälscht wird
				select(TMP, k, ind+zaehler, zaehler);
			}			
		}
		else 
			return index;
	
	}

Meine Probleme:
a) soll das Programm beim ersten If abbrechen, ich weiß allerdings nicht wie. (return geht nicht, da ein Int zurückgegeben werden muss)

b) wenn ich (testweise) oben return 0; eingebe, dann sagt mit Eclipse, dass ich ein Int zurückgeben muss. Also dass die Möglichkeit besteht, dass ich niemals auf ein return treffe... aber warum?

c) funktioniert der Code so überhaupt? :bahnhof:


Vielen Dank schonmal :toll:
 
Zuletzt bearbeitet:

SilverClaw

Aktives Mitglied
public static int select( int [] A, int k, int index, int zaehler) { //beim Aufruf muss index = A.length und zaehler = 0 sein.

Dann lass nur den Array übergeben und lege k und index in der Methode fest. o.ô
Also

Java:
public static int select(int[] A, int k) {
int zaehler = A.length;
int index = 0;
}

if ( k > A.length)
return; //an dieser Stelle soll das Programm abbrechen...?
Dann gib entweder einen nicht-normalen Wert zurück...z.B. -1, falls sonst nur positive Zahlen kommen sollten. Oder mach es richtig und wirf eine Exception, z.B. throw new IllegalArgumentException("k muss kleiner sein.);
 

Thallius

Top Contributor
Also Rekursion sehe ich in der Aufgabenstellung eigentlich keine.

Ohne es jetzt ausprobiert zu haben einfach mal so hingeschrieben:

Java:
public class main 
{
	int[] buffer;
	
	public void main(String[] args)
	{
		int k=5;
		int max=Integer.MAX_VALUE;
		
		for(int i=0;i<k;i++)
		{
			max=getMax(buffer, max);
		}
		System.out.println(k+"te Maximum = "+max);
	}
	
	private int getMax(int[] buffer, int max)
	{
		int newMax=0;
		for(int i=0;i<buffer.length;i++)
		{
			if(buffer[i]>newMax && buffer[i]<max)
			{
				newMax=buffer[i];
			}
		}
		return newMax;
	}
}

Gruß

Claus
 

kritrat

Mitglied
Ok, return -1 ist in dem Fall möglich..

Zaehler und Index IN der Funktion zu deklarieren geht nicht, da sie sonst bei jedem rekursiven Aufruf, diese wieder und wieder auf den gleichen Wert gesetzt werden.

Nur beim erstmaligen Aufruf müssen sie diese Werte haben.


@Thallius

Prinzipiell funktioniert der Code so, allerdings geht es auch darum, das mit einer "größer gleich" Ordnung zu machen.

Wenn also 10 das größte Element ist, 10 allerdings 2 mal vorkommt, dann wäre 9 das drittgrößte Element.

Enstprechend habe ich versucht, das gefundene Element bei jedem neuen Aufruf zu isolieren.
 

jstei001

Aktives Mitglied
Ich weiß nicht was du mit k-t element meinst. Soll die Aufgabe jetzt sein das größte Element innerhalb eines Arrays zu finden? Oder den Array zu sortieren?

Suchst du jetzt explizit nach einer rekursiven Lösung oder geht auch eine Iterative?
 

kritrat

Mitglied
Ich weiß nicht was du mit k-t element meinst. Soll die Aufgabe jetzt sein das größte Element innerhalb eines Arrays zu finden? Oder den Array zu sortieren?

Suchst du jetzt explizit nach einer rekursiven Lösung oder geht auch eine Iterative?


k-t größtes Element bedeutet, wenn k=3 ist soll das drittgrößte Element ausgegeben werden (bzw dessen Index). k=5 das fünftgrößte.. usw

Die Lösung muss nicht rekursiv sein, ich gehe nur davon aus, dass es ohne Rekursion nur schwer möglich ist...
 

kritrat

Mitglied
Ok, ich bin jetzt auf die Lösung gekommen.
Der Code an sich funktioniert so, allerdings muss ich den Index vernachlässigen und den "max" Wert zurückgeben.

Habe hier leider keine Möglichkeit den Code nochmal zu schreiben, werde ihn dann aber schnellstmöglich posten und das Thema (sofern er wirklich läuft) als erledigt melden.

Danke für die Hilfe
 

jstei001

Aktives Mitglied
Das ist auch ohne Rekursion möglich, hängt auch immer ein bisschen davon ab wie groß dein Array ist.

Meiner Meinung nach wäre die sauberste Lösung, wenn du den Array erst sortierst und dann einfach auf das gewünschte Element zugreifst. Z.b. index=3 ist dann das 4. größte Element usw.

Zum sortieren gibt es ja einen haufen Algorithmen (BubbleSort, MergeSort etc.) Dann sieht dein Quellcode so aus:

Java:
public static int select(int[] a, int k){

doSort(a); //Die Methode doSort implementiert einen Sortieralgorithmus

if(k>a.length){
  return -1
}

return a[k-1];

}
 

fischefr

Aktives Mitglied
Was ist denn eigentlich der Zweck dieser Übung? Performance kann nicht der Grund für die Vermeidung einer Sortierung sein, die ist bei dieser Lösung sicherlich schlechter.

Ich erinnere mich aus dem Studium, dass es eine Datenstruktur gab, die jeweils das größte Element bereit hielt, ohne zuvor die komplette Datenmenge zu sortieren. Stattdessen rutscht nach Entnahme des größten Elements das nächstkleinere nach. Hab eben mal etwas recherchiert und ich glaube, das Ding hies "heap". Mit PriorityQueue, die einen (priority)heap verwendet kommst du am besten hin, was performance betrifft (denke ich zumindest). Insbesondere wenn du das zweit- oder drittgrößte Element suchst (also das k-t-größte Element, wobei k klein ist).

..ist nur ein Hinweis, wenns nur einfach eine x-beliebige Übung zum Programmieren ist oder für Rekursion ist deine Lösung natürlich auch ok. Dann wärs natürlich interessant, deinen und meinen Ansatz mal gegeneinander laufen zu lassen und die Zeit zu vergleichen ;-)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
B Variablen Problem mit return String[] Java Basics - Anfänger-Themen 4
M Problem mit boolean. Return nicht erkannt Java Basics - Anfänger-Themen 10
V Problem mit return Java Basics - Anfänger-Themen 7
K Return Problem Java Basics - Anfänger-Themen 3
A Datentypen problem return aus try-block Java Basics - Anfänger-Themen 4
B problem mit der return anweisung Java Basics - Anfänger-Themen 11
P return-Problem Java Basics - Anfänger-Themen 3
J Verständnis Problem mit return --> Klausuraufgabe Java Basics - Anfänger-Themen 4
M Problem mit return Wert Java Basics - Anfänger-Themen 5
G return Problem Java Basics - Anfänger-Themen 6
D return Problem. Java Basics - Anfänger-Themen 3
L Problem mit 2 Methoden // return? Java Basics - Anfänger-Themen 8
megachucky Kleines Problem mit dem "return" einer Methode. Java Basics - Anfänger-Themen 11
MiMa Java Doc mehrere Return Parameter Java Basics - Anfänger-Themen 11
A Return in While Schleife Java Basics - Anfänger-Themen 6
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
I Return Array Java Basics - Anfänger-Themen 4
Q return Ausgabe Java Basics - Anfänger-Themen 4
javapingu Variablenwerte ändern ohne return Statement? Java Basics - Anfänger-Themen 7
C Ausgabe boolean return ((n==9)||(n==0)); Java Basics - Anfänger-Themen 13
G return 1 + methode Java Basics - Anfänger-Themen 4
H Methode mit Array als Rückgabe This method must return a result of Type int[] Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
J Missing Return Statement Java Basics - Anfänger-Themen 11
T Return einer anderen Methode herausfinden Java Basics - Anfänger-Themen 9
C ArrayList mit return zurückgeben Java Basics - Anfänger-Themen 13
M kann man return in nur einer Methode einsetzen? Java Basics - Anfänger-Themen 7
V return String[] führt zu [Ljava.lang.String;@50675690 Java Basics - Anfänger-Themen 7
K Return in Schleife Java Basics - Anfänger-Themen 4
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
S Missing return Java Basics - Anfänger-Themen 4
das_leon return message Java Basics - Anfänger-Themen 2
C return kann nicht auf variable zugreifen Java Basics - Anfänger-Themen 26
N Ausführung gibt keinen Fehler an, Return wird aber nicht ausgegeben Java Basics - Anfänger-Themen 22
R return: cannot find symbol Java Basics - Anfänger-Themen 2
R Ratespiel mit Return und einer Eingabe Java Basics - Anfänger-Themen 1
Z Return in While-Schleife Java Basics - Anfänger-Themen 7
N Frage zu this, super und return Java Basics - Anfänger-Themen 13
K ArrayList ausgeben mit return Java Basics - Anfänger-Themen 6
M Return statement Java Basics - Anfänger-Themen 4
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
M Abbrechen Methode ohne return Java Basics - Anfänger-Themen 3
M Methoden Datei einlesen und als return übergeben. Java Basics - Anfänger-Themen 8
L OOP Return Java Basics - Anfänger-Themen 10
L Erste Schritte Frage zu 'return' Java Basics - Anfänger-Themen 4
J Methoden Rekursive Return Methode Java Basics - Anfänger-Themen 2
W Return statement in Methode nur bei if-clause Java Basics - Anfänger-Themen 3
D Methoden Return-Wert wird nicht ausgegeben Java Basics - Anfänger-Themen 3
F Return-Anweisung Java Basics - Anfänger-Themen 2
E Erste Schritte <? super Unterklasse> Return-Typ darf nicht vom Wildcard-Typ sein Java Basics - Anfänger-Themen 5
B OOP Methode mit Array mit return verlassen Java Basics - Anfänger-Themen 8
J Grundsätzliche Frage zu return Types in Methoden Java Basics - Anfänger-Themen 6
G return-wert für eine Methode Java Basics - Anfänger-Themen 1
B Methoden Probleme mit for Schleife und return Java Basics - Anfänger-Themen 5
Q Tastatureingabe direkt nach Eingabe (ohne zwischenzeitliches "Return" o.Ä ) weiterverwenden Java Basics - Anfänger-Themen 1
O Per return Run Methode beenden Java Basics - Anfänger-Themen 3
M Arrays als return Value? Java Basics - Anfänger-Themen 2
C Return statement Java Basics - Anfänger-Themen 10
T Boolean Missing return Statement?! Java Basics - Anfänger-Themen 2
Z Methoden return nullprüfung Java Basics - Anfänger-Themen 7
O Java return in Schleife Java Basics - Anfänger-Themen 4
K Was macht hier genau return? Java Basics - Anfänger-Themen 2
G Methoden Was bedeutet return in einer Methode Java Basics - Anfänger-Themen 5
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
K Variablen RETURN in Case-Switch / This method must return a result of type Item Java Basics - Anfänger-Themen 4
R If Verschachtelung und return; Java Basics - Anfänger-Themen 4
M Frage zum return; Befehl Java Basics - Anfänger-Themen 1
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
C Einige Anfängerfragen (Return-Wert, Exception...) Java Basics - Anfänger-Themen 11
S Methoden Return Java Basics - Anfänger-Themen 8
T return-Wert verwenden? Java Basics - Anfänger-Themen 12
T Return eines Int-Werts? Java Basics - Anfänger-Themen 3
W return-Anweisung gibt nichts aus Java Basics - Anfänger-Themen 5
R Return in If Java Basics - Anfänger-Themen 10
S Methoden Return Anweisung beendet Methode nicht, stattdessen wird diese zweimal durchlaufen Java Basics - Anfänger-Themen 3
G array return methode Java Basics - Anfänger-Themen 10
L return wird nicht erkannt? Java Basics - Anfänger-Themen 3
J Regex mit Return Java Basics - Anfänger-Themen 3
M Variablen return-array klonen Java Basics - Anfänger-Themen 3
A Methode mit Array als Param --> return Array --> Fehler Java Basics - Anfänger-Themen 3
S Zeichen einlesen ohne Return? Java Basics - Anfänger-Themen 19
P Compiler-Fehler Boolean: Missing Return Statement Java Basics - Anfänger-Themen 4
S probleme mit der return anweisung Java Basics - Anfänger-Themen 20
E Warum wird Methode nicht durch return-Befehl beendet? Java Basics - Anfänger-Themen 3
V Erste Schritte Return ohne Argument Java Basics - Anfänger-Themen 6
I Methoden Missing return statement; Intervallschachtellung Java Basics - Anfänger-Themen 12
S Frage zu Vererbung und return. Java Basics - Anfänger-Themen 4
R return (mehrere floats) Java Basics - Anfänger-Themen 11
E Return String Java Basics - Anfänger-Themen 10
P Methoden Methode ohne return abbrechen? Java Basics - Anfänger-Themen 12
I Return Befehl in Methode Java Basics - Anfänger-Themen 13
P Return aus For-Schleife Java Basics - Anfänger-Themen 19
S return in GUI ? Java Basics - Anfänger-Themen 12
M This method must return a result of type int Java Basics - Anfänger-Themen 13
F Erste Schritte return (char)toUnsignedInt(value) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben