Java Sortieren BubbleSort?
Wir sollen ein Array so sortieren, dass alle Zahlen in einer chronologischen Reihenfolge sind. Es geht explizit um die Methode mit der Fehlermeldung, welche das sortieren soll. Kann mir jemand mit der Fehlermeldung helfen und mir sagen, ob das sonst so sauber programmiert ist?
1 Antwort
- In der Methode Swap fehlt der Datentyp von i
- Die for-Schleife ergibt keinen Sinn. Soll sie vorwärts oder rückwärts über das Array iterieren?
- Der Inhalt der For-Schleife ergibt keinen Sinn. Was versuchst du, zu erreichen?
Da steht:
public void Swap(i)
Das ist in Java nicht erlaubt. Bei Parametern muss der Datentyp angegeben werden.
Um rückwärts zu laufen, muss die Bedingung anders sein. Ich nehme an, du willst beim Index 0 aufhören:
for (int i = 10; i >= 0; --i)
Ich verstehe aber nicht, warum du nur über die ersten 10 Elemente iterierst. Willst du nicht das gesamte Array sortieren?
Die if-Bedingung ist leer, hat also keinen Effekt. Ich vermute, das Vertauschen soll innerhalb des if-Blocks stehen.
Und warum rufst du in der for-Schleife rekursiv die Funktion Swap auf?
Okay brauche ich der Methode Swap dann nichts übergeben? Das Vertauschen habe ich jetzt in den if-Block geschrieben. Gibt es sonst noch was?
brauche ich der Methode Swap dann nichts übergeben?
Das kommt darauf an, was du mit der Methode bezweckst!
Der Name "swap" suggeriert, dass die Methode lediglich zwei Elemente vertauscht. Ich war daher relativ verwirrt, darin eine for-Schleife zu sehen.
Bitte überleg dir erst mal, was die Methode machen soll, und entscheide dann, welche Parameter du übergeben willst.
Die Methode soll die ersten 10 Stellen dieses Array richtig sortieren, dass die Zahlen in richtiger Reihenfolge stehen.
Warum nur die ersten 10 Elemente? Was ist mit dem Rest des Arrays?
Wie gesagt das ist so vorgegeben. Verstehst du denn zumindest, was mein Ziel ist? Ich komme momentan so nicht ganz weiter. So sieht meine Methode momentan aus
public void Swap()
{
int[]dummy=st.ausgabe();
int temp = 0;
for(int i=10;i<=0;i--) {
if(dummy[i] <= dummy[i+1]) {
temp = dummy[i];
dummy[i]=dummy[i+1];
dummy[i+1]=temp;
}
jta2.append(" "+dummy[i]+'n');
}
}
for(int i=10;i<=0;i--) {
10 ist größer als 0 d.h., die Bedingung sollte eher i >= 0 sein.
Im Moment iterierst du übrigens über 12 Elemente. Das Element mit Index 10 ist das 11. Element (da wir bei 0 anfangen zu zählen), und mit dummy[i + 1] greifst du auch auf das dahinter zu.
Um nur über die ersten 10 Elemente zu iterieren:
for (int i = 8; i >= 0; i--) {
Das nächste Problem ist, dass du Bubble Sort nicht verstanden hast. Wenn du nur einmal über die Elemente iterierst, sind diese noch nicht sortiert. Sortiert sind sie erst, wenn du das ganze 9 mal wiederholst:
for (int n = 0; n < 9; n++) {
for (int i = 8; i >= 0; i--) {
if (dummy[i] <= dummy[i + 1]) {
temp = dummy[i];
dummy[i] = dummy[i + 1];
dummy[i + 1] = temp;
}
}
}
Die Ausgabe kannst du erst ganz am Ende machen:
for (int i = 9; i >= 0; i--)
jta2.append(" " + dummy[i] + 'n');
Soll nach jeder Zahl wirklich ein 'n' ausgegeben werden, oder ist ein Zeilenumbruch ('\n') gemeint?
Es soll der Zeilenbruch sein und könntest du mir vlt erklären, wofür die erste for-Schleife ist und was sie macht? Und funktioniert das so, wie du es jetzt geschrieben hast?
Ja, das sollte so funktionieren. Probier es halt mal aus!
Bei Bubble Sort werden immer nur benachbarte Elemente vertauscht. Du must einen Bereich mit 10 Elementen sortieren. Im worst case ist das Element, das an den Anfang gehört, ganz am Ende; um es an den Anfang zu bringen, müssen wir die innere Schleife also 9 mal ausführen.
Wenn du Bubble Sort nicht verstanden hast, lies dir bitte den Wikipedia-Artikel durch.
Sie soll beim zehnten Wert beginnen und dann rückwärts laufen und was ist gemeint es fehlt der Datentyp i und wieso ergibt sie keinen Sinn?