Zum Inhalt springen

Sortieren ?!


wmbetter

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

ü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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 !

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...