wmbetter Geschrieben 27. November 2006 Geschrieben 27. November 2006 Guten Tag ! ich bin neu hier im forum, und eigentlich auch (fast) neu in der Java Welt ! Habe zwar schon einige leichtere codes programmiert, aber mehr nicht. Ich waage mich jetzt an ein etwas schwereres projekt. Und zwar will ich ein programm schreiben, das die befehlszeilenargumente (gleitkommazahlen) absteigend sortiert und wieder ausgibt. Nur will ich das ganze selber schreiben, also ohne irgendwelche importieren klassen wie zB sort ! Hat jemand hinweise oder ansätze für mich, wie ich an das problem ran gehen muss ? Ich habe mich ein wenig umgeschaut und bin auf diesen Code gestoßen. Java: public class BubbleSort { public static void sort(int[] array) { // Wir nehmen erstmal an, dass das Array sortiert ist. boolean sortiert = true; do { sortiert = true; // Nun gehen wir das Array komplett durch... for (int i = 1; i < array.length; i++) { // und vergleichen jedes Element mit dem linken Nachbar, // darum fängt die for-Schleife auch mit 1 an und nicht mit 0. if (array[i - 1] > array) { // Sollte das linke Element größer sein als das rechte, // so werden diese beiden vertauscht. final int tmp = array[i - 1]; array[i - 1] = array; array = tmp; // Und wir merken uns, dass das Array eben doch // nicht sortiert war. sortiert = false; } } // Den obigen Code müssen wir nun so lange ausführen, // bis keine Vertauschungen mehr nötig sind. // Dies ist genau dann der Fall, wenn das array sortiert ist. } while (!sortiert); // Diese Methode braucht auch keinen Rückgabewert, // da das übergebene Array modifiziert wird. } // nur zum Testen public static void main(String[] args) { int[] test = {52,654,15,994,2,35,12,5,7,9}; sort(test); for (int i=0; i<test.length; i++) { System.out.println(test); } } } Dieser sortiert aber nicht die Befehlszeilenargumente, und er sortiert auch nicht absteigend. Ich versuche gerade ihn ein wenig zumzuschreiben, habe aber keinen besonderen Erfolg Vlt. kann mir ja jemand helfen ... Grüße Zitieren
ozgur Geschrieben 27. November 2006 Geschrieben 27. November 2006 versuchs mal hiermit. Hab jetzt kein javacompiler hier und kanns nicht testen müßte aber funktionieren. Java: public class BubbleSort { public static void sort(float[] array) { // Wir nehmen erstmal an, dass das Array sortiert ist. boolean sortiert = true; do { sortiert = true; // Nun gehen wir das Array komplett durch... for (int i = 1; i < array.length; i++) { // und vergleichen jedes Element mit dem linken Nachbar, // darum fängt die for-Schleife auch mit 1 an und nicht mit 0. if (array[i - 1] < array) { // Sollte das linke Element kleiner sein als das rechte, // so werden diese beiden vertauscht. final float tmp = array[i - 1]; array[i - 1] = array; array = tmp; // Und wir merken uns, dass das Array eben doch // nicht sortiert war. sortiert = false; } } // Den obigen Code müssen wir nun so lange ausführen, // bis keine Vertauschungen mehr nötig sind. // Dies ist genau dann der Fall, wenn das array sortiert ist. } while (!sortiert); // Diese Methode braucht auch keinen Rückgabewert, // da das übergebene Array modifiziert wird. } // nur zum Testen public static void main(String[] args) { float[] test = {52.9,654.3,654.5,654.4,2,35,12,5,7,9}; sort(test); for (int i=0; i<test.length; i++) { System.out.println(test); } } } wenns klappt gib kurz Bescheid Zitieren
wmbetter Geschrieben 27. November 2006 Autor Geschrieben 27. November 2006 Hallo ! VIelen Dank erstmal ! Habe das jetzt versucht zu kompilieren, aber es werden 3 errors ausgegeben: sort.java:1: 'class' or interface expected public statuc void sort(float[] array) sort.java:37 'class' or interface expected und sort.java:39: 'class' or interface expected Viele Grüße Zitieren
baba007 Geschrieben 27. November 2006 Geschrieben 27. November 2006 dann hast du etwas übersehen. bei mir wird es bis auf die Tatsache, dass er floats nicht mag und ich auf double umgesattelt habe, alles richtig. public class BubbleSort { public static void sort(double[] array) { // Wir nehmen erstmal an, dass das Array sortiert ist. boolean sortiert = true; do { sortiert = true; // Nun gehen wir das Array komplett durch... for (int i = 1; i < array.length; i++) { // und vergleichen jedes Element mit dem linken Nachbar, // darum fängt die for-Schleife auch mit 1 an und nicht mit 0. if (array[i - 1] < array[i]) { // Sollte das linke Element kleiner sein als das rechte, // so werden diese beiden vertauscht. final double tmp = array[i - 1]; array[i - 1] = array[i]; array[i] = tmp; // Und wir merken uns, dass das Array eben doch // nicht sortiert war. sortiert = false; } } // Den obigen Code müssen wir nun so lange ausführen, // bis keine Vertauschungen mehr nötig sind. // Dies ist genau dann der Fall, wenn das array sortiert ist. } while (!sortiert); // Diese Methode braucht auch keinen Rückgabewert, // da das übergebene Array modifiziert wird. } // nur zum Testen public static void main(String[] args) { double[] test = {52.90 , 654.3,654.5,654.4,2,35,12,5,7,9}; sort(test); for (int i=0; i<test.length; i++) { System.out.println(test[i]); } } } und die Ausgabe : 654.5 654.4 654.3 52.9 35.0 12.0 9.0 7.0 5.0 2.0 Zitieren
wmbetter Geschrieben 27. November 2006 Autor Geschrieben 27. November 2006 hallo ! Vielen Dank, jetzt funktioniert es. Das einzige was ich jetzt noch einbauen will ist, dass er Zahlen sortiert, die ich selber in der Befehlszeile eingebe .. also wenn ich 6 4 8 23 eingeb soll: 23 8 6 4 ausgegeben werden zB. Hat da jemand einen Ansatz für mich ? Viele Grüße Zitieren
baba007 Geschrieben 27. November 2006 Geschrieben 27. November 2006 in der Berufsschule haben wir uns diese Klasse zusammengebastelt um den Programmieraufwand gering zu halten : import java.io.BufferedReader; import java.io.InputStreamReader; public class IOHelp { static public final String VERSION = "V_3"; private IOHelp(){ } static public int getInteger(){ int iAuswahl=0; iAuswahl = Integer.parseInt(getString()); return iAuswahl; } static public String getString(){ String sString; InputStreamReader refInputStreamReader = new InputStreamReader(System.in); BufferedReader refBufferedReader = new BufferedReader(refInputStreamReader); try{ sString = refBufferedReader.readLine(); return sString; } catch (Exception e){ sString = "E X E P T I O N --> e"; return sString; } } } und in der Main kommt dann eine FOR oder do while schleife hin mit array = IOHelp.getinteger(); leicht umzubauen auf float oder was auch immer Zitieren
wmbetter Geschrieben 27. November 2006 Autor Geschrieben 27. November 2006 Hallo ! Vielen Dank ... bin gerade dabei mir den Code anzusehen, leider verstehe ich ihn nur tlw, und auch die Umsetzung auf den Bubblesort code fällt mir nicht leicht ... Naja, ich werd mal weiter und genauer lesen ! Grüße Zitieren
wmbetter Geschrieben 27. November 2006 Autor Geschrieben 27. November 2006 kann ich das vielleicht auch mit einem Scanner lösen ?! Grüße Zitieren
baba007 Geschrieben 27. November 2006 Geschrieben 27. November 2006 du verstehst aber die grundsätzlichen Sprachkonstrukte wie FOR, WHILE, Funktionen, Rückgabe etc. wo happert es den ? ich empfehle dir bei vielen Fragen Java ist auch eine Insel aufzusuchen. Für viele Probleme die richtige Adresse, zumindest am Anfang Zitieren
wmbetter Geschrieben 27. November 2006 Autor Geschrieben 27. November 2006 Hallo ! Ein gewisses Grundverständnis ist da ich lese ja auch brav in diversen Java Büchern. Leider hilft mir das im moment für dieses spezielle Problem nicht viel. Den Bubblesort Code verstehe ich eigentlich ganz gut, nur wie ich die funktion mit den Befehlszeilenargumenten rein bekommen soll, ist mir ein Rätsel ... Grüße Zitieren
baba007 Geschrieben 27. November 2006 Geschrieben 27. November 2006 kann ich das vielleicht auch mit einem Scanner lösen ?! Grüße Ich glaube Scanner sind bei regulären Ausdrücken ein Thema und a bissel to much für Zahlen einlesen Zitieren
wmbetter Geschrieben 27. November 2006 Autor Geschrieben 27. November 2006 Ich habe das alles mal in der Schule gelernt. Und macht mein Bruder gerade in der Schule Java und ich will ihm da ein bisschen unterstützen, deswegen frische ich nochmal auf. Wir scheitern nur leider an der Umsetzung der Befehlszeile ... Grüße Zitieren
wmbetter Geschrieben 27. November 2006 Autor Geschrieben 27. November 2006 hmm ... stimmt, mit einem Scanner komm ich nicht weiter ... Grüße Zitieren
wmbetter Geschrieben 27. November 2006 Autor Geschrieben 27. November 2006 Auch wenn ich jetzt einen Dreifachpost riskiere ich komm nicht dahinter wie ich das umsetzen soll ... Grüße Zitieren
ozgur Geschrieben 27. November 2006 Geschrieben 27. November 2006 über die konsole eingeben ist etwas komplizierter. Man muss die klasse bufferedReader benutzen soweit ich mich erinnern kann, und dann einzeln die Werte eingeben, eingelese Strings in double umwandeln (Typumwandlung) und dann an die Sortiermethode schicken.... wie gesagt hab weder Compiler noch Entwicklungsumgebung an diesem Rechner. Sorry. Zitieren
Jaraz Geschrieben 27. November 2006 Geschrieben 27. November 2006 Was willst du? 1. Das über die Befehlszeile übergeben? Also direkt mit beim Programmstart? java BubbleSort 2 3 33 12[enter] Programm gibt sortierte Liste aus. oder 2. das Programm starten und dann alles auf einmal eingeben? java BubbleSort[enter] Programm startet und wartet auf Eingabe 2 3 33 12[enter] Programm gibt sortierte Liste aus. Gruß Jaraz Zitieren
wmbetter Geschrieben 28. November 2006 Autor Geschrieben 28. November 2006 Hallo ! Vielen Dank für eure Hilfe erstmal ! ja die erste Variante habe ich mir vorgestellt. Also java Bubblesort 4 5 3 8 ! Grüße Zitieren
Jaraz Geschrieben 28. November 2006 Geschrieben 28. November 2006 Hi, public static void main(String[] args) { double[] d = new double[args.length]; for (int i = 0; i < args.length; i++) { d[i] = Double.parseDouble(args[i]); } // ab hier mit double Array weiterarbeiten } Gruß Jaraz Zitieren
wmbetter Geschrieben 28. November 2006 Autor Geschrieben 28. November 2006 Hallo ! Vielen Dank erstmal. also sollte das so aussehen ? public class BubbleSort { public static void main(String[] args) { double[] d = new double[args.length]; for (int i = 0; i < args.length; i++) { d[i] = Double.parseDouble(args[i]); } // ab hier mit double Array weiterarbeiten } public static void sort(double[] array) { // Wir nehmen erstmal an, dass das Array sortiert ist. boolean sortiert = true; do { sortiert = true; // Nun gehen wir das Array komplett durch... for (int i = 1; i < array.length; i++) { // und vergleichen jedes Element mit dem linken Nachbar, // darum fängt die for-Schleife auch mit 1 an und nicht mit 0. if (array[i - 1] < array[i]) { // Sollte das linke Element kleiner sein als das rechte, // so werden diese beiden vertauscht. final double tmp = array[i - 1]; array[i - 1] = array[i]; array[i] = tmp; // Und wir merken uns, dass das Array eben doch // nicht sortiert war. sortiert = false; } } // Den obigen Code müssen wir nun so lange ausführen, // bis keine Vertauschungen mehr nötig sind. // Dies ist genau dann der Fall, wenn das array sortiert ist. } while (!sortiert); // Diese Methode braucht auch keinen Rückgabewert, // da das übergebene Array modifiziert wird. } Nur wie bringe ich den Code jetzt noch dazu, dass er mir dann eine Ausgabe macht ? Grüße Zitieren
wmbetter Geschrieben 28. November 2006 Autor Geschrieben 28. November 2006 Komm nicht ganz dahinter, wie das aussehen soll .... Grüße Zitieren
Dragon8 Geschrieben 28. November 2006 Geschrieben 28. November 2006 also die größten teile um dein problem endgültig zu lösen scheinst du ja nun zu haben. eine ausgabe kannst du mit "System.out.print()" bzw. "System.out.println()" realisieren, wobei das erste einfach nur den text ausgibt der ihr übergeben wird, und die zwei methode setzt hinter der ausgabe noch einen zeilenumbruch, wodurch die nächste ausgabe in der nächsten zeile beginnt. dann musst du das nur noch zusammenfügen, also die parameter welche an das programm übergeben werden auslesen, was dir ja Jaraz gezeigt hat. dabei kommt ein Array mit Double Datentypen heraus, dieses übergibst du an deine sortierfunktion. und danach liest du die werte aus dem array wieder heraus und gibst sie mit den oben genannten befehlen wieder aus. Zitieren
wmbetter Geschrieben 28. November 2006 Autor Geschrieben 28. November 2006 Hallo ! Vielen Dank ! also der Code müsste jetzt fertig sein, jetzt kommt es nur noch darauf an ihn richtig zusammen zu fügen. Aber ich versteh noch nicht ganz wie ... also System.out.print()" bzw. "System.out.println()" versteh ich ja, die geben mir das Ergebnis aus, und machen einen Zeilenumbruch. Aber das zusammenfügen meiner ganzen Code Teile klappt nicht so ganz ... Hier mal der Teil von Jaraz, der es mir erlaubt in der Eingabezeile die Werte einzugeben, die dann sortiert werden sollen: public static void main(String[] args) { double[] d = new double[args.length]; for (int i = 0; i < args.length; i++) { d[i] = Double.parseDouble(args[i]); } // ab hier mit double Array weiterarbeiten } und hier ist mein Bubblesort Code public static void sort(double[] array) { // Wir nehmen erstmal an, dass das Array sortiert ist. boolean sortiert = true; do { sortiert = true; // Nun gehen wir das Array komplett durch... for (int i = 1; i < array.length; i++) { // und vergleichen jedes Element mit dem linken Nachbar, // darum fängt die for-Schleife auch mit 1 an und nicht mit 0. if (array[i - 1] < array[i]) { // Sollte das linke Element kleiner sein als das rechte, // so werden diese beiden vertauscht. final double tmp = array[i - 1]; array[i - 1] = array[i]; array[i] = tmp; // Und wir merken uns, dass das Array eben doch // nicht sortiert war. sortiert = false; } } // Den obigen Code müssen wir nun so lange ausführen, // bis keine Vertauschungen mehr nötig sind. // Dies ist genau dann der Fall, wenn das array sortiert ist. } while (!sortiert); // Diese Methode braucht auch keinen Rückgabewert, // da das übergebene Array modifiziert wird. } Jetzt steh ich irgendwie auf der Leitung ... Grüße und vielen vielen Dank an euch alle ! Zitieren
derJan Geschrieben 28. November 2006 Geschrieben 28. November 2006 wenn du dich für sortieralgorithmen interessierst: Allgemeine und spezielle Sortieralgorithmen + Suchalgorithmen mit viel code zum rumexperimentieren... Zitieren
wmbetter Geschrieben 28. November 2006 Autor Geschrieben 28. November 2006 Hallo ! Dankeschön, ich kenne diese Seite schon, und muss gestehen, dass ich noch nicht alles fertig gelesen bzw. verstanden habe ... Im moment bin ich ziemlich depremiert, dass ich meine Codes nicht zu einem funktioniereden zusammenfügen kann ... Viele Grüße Zitieren
wmbetter Geschrieben 28. November 2006 Autor Geschrieben 28. November 2006 bin schon am verzweifeln :-( Grüße Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.