Mit ArrayList geht irgendwie Rekursion nicht, oder????
-
Hallo,
habe folgenden Code geschrieben
import java.util.ArrayList; public class Blatt3_Random_Sel { static ArrayList<Integer> s1 = new ArrayList<Integer>(); static ArrayList<Integer> s2 = new ArrayList<Integer>(); static ArrayList<Integer> s3 = new ArrayList<Integer>(); public static int kelem (int k, ArrayList <Integer> listex) { s1.clear(); s2.clear(); s3.clear(); int z1,z2,z3; int m= listex.size(); if (m==1) //Rekursionsanker return listex.get(0); int b= 7;//(int) (Math.random()*m+1); //Zufälliges Pivotelement //int a= listex.get(b); for (int i=0;i<m;i++){ if (listex.get(b) == listex.get(i)) { s2.add(listex.get(i)); } if (listex.get(b)<listex.get(i)) { s1.add(listex.get(i)); } if (listex.get(b)>listex.get(i)) { s3.add(listex.get(i)); } } z1=s1.size(); z2=s2.size(); z3=s3.size(); System.out.println(s1); System.out.println(s2); System.out.println(s3); if ((z1 < k ) && (k <= m-z3)) { return listex.get(listex.get(b)); } //else { if (z1 >= k) { return kelem (k,s1); }System.out.println(s1); //else //return kelem (k-(m-z3),s3); //} return -1; } public static void main(String[] args) { ArrayList<Integer> liste = new ArrayList <Integer>(); for(int t=0;t<;t++){ int x= (int) (Math.random()*30+1); System.out.println (kelem(4,liste)); } }
Also es geht darum, das k-te Element zu finde.Die Idee des Algorithmus ist unwichtig.Wir sollen halt mit rekursion das k-te Element finden.
Eigentlich funktioniert alles bis auf den rekursiven Aufruf in Zeile 57.
Kann mir da vielleicht jemand weiterhelfen...
kann langsam nich mehr denken
danke
-
Du solltest s1, s2 und s3 lokal in der Methode halten. Oder zumindest beim Aufruf der Rekursion eine Kopie erzeugen. Sonst leerst du bei deiner Rekursion listex (da s1 und listex dasselbe Objekt referenzieren).
Und deine main-Methode macht überhaupt keinen Sinn.
-
Ok den ersten tipp werd ich mir mal zu Herzen nehmen...
Aber warum ergibt meine Main keinen Sinn????
Ich erstelle doch randomisiert nur eine Liste und rufe dann die vorher definierte funktion mit den Parametern auf auf..
Ich weiß nicht was da sonst stehen sollte???Kannst du mir das vielleicht erklären
-
asd_xX schrieb:
Kannst du mir das vielleicht erklären
Ich sehe da die Initialisierung einer ArrayList, die leer ist. Dann eine for-Schleife, in der du Zufallswerte in x speicherst, dann aber mit der Variable nichts machst, sie also insbesondere auch nicht der Liste hinzufügst. Und dann wird noch innerhalb der Schleife (und nicht danach) deine Methode aufgerufen...
-
Achso
jetzt sehe ich was du meinst...
Ja klar du hast recht.
Ich hatte den Code kopiert und dann hier im Forum noch ein paar sachen im Code geändert.
Mein FehlerDanke trotzdem