Array mit BubbleSort sortieren

Gifti1924

Neues Mitglied
Hallo!

Ich bin absoluter Neuanfänger ohne Vorkenntnisse was Programmieren betrifft. Zwecks meiner Ausbildung beschäftige ich mich seit 2 Monaten (1 mal in der Woche) mit Java.

Ich muss nun Zufallszahlen in einem Array erzeugen und danach ausgeben, welche Zahlen doppelt vorkommen.

Hier mein Code bisher: (Nur vorweg: Ich habe die Zahlenmäßige angabe mal ignoriert und zu Testzwecken ein Array mit 5 Datensätzen und 10 Zufallszahlen erzeugt.

Java:
package;

import java.util.Random;

public class D{

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int feld1[] = new int[5];
		Random r = new Random();
		boolean sortiert = true;
		int h = 0;

		for (int i = 0; i < feld1.length; i++) {
			feld1[i] = r.nextInt(10) + 1;
			System.out.println((i + 1) + ". Zufallszahl:  " + feld1[i]);
		}

		while (sortiert) {
			sortiert = false;
			for (int i = 0; i < feld1.length - 1; i++) {
				if (feld1[i] == feld1[i + 1]) {
					h = feld1[i];
					feld1[i] = feld1[i + 1];
					feld1[i + 1] = h;

					sortiert = true;

				}
			}

		}
		for (int i = 0; i < feld1.length; i++) {
			System.out.println((i + 1) + ". sortierte Zahl: " + feld1[i]);
		}

	}

}

Ich weiß, ich bin noch nicht auf die doppelten Zahlen eingegangen (für die hab ich eh schon ne überlegung). Mein Problem ist, dass das Array nicht sortiert wird.
Ich weiß das, weil ich durch die letzte for Schleife sehe, dass die Zahlen genauso nach dem BubbleSort ausgegeben werden wie davor.

Ich hoffe ihr könnt mich erleuchten wieso BubbleSort nicht eingreift!
Bzw. wäre super wenn mir wer sagen könnte, wieso Code Zeile 22 nur funktioniert, wenn ich feld1.length -1 eingebe. Bei der normalen feld1.length kommt ein ArrayIndexOutOfBoundsException-Fehler.

mfg

ps: google glüht schon von meinen Fragen, habe aber leider nichts dazu gefunden
 
Zuletzt bearbeitet:
Hallo 🙂

Fällt dir auf, dass dein Sortier-Algorithmus nur auf == prüft, d.h. etwas macht, wenn Element gleich sind? Normalerweise müsste ein Algorithmus ja vergleichem, ob Sachen in der richtigen Reihenfolge sind, oder? 😉

Die Variable "sortiert" hat glaube ich auch einen eher irreführenden Namen.
 
Ich bin ja so ein Trottel 😀

Natürlich muss ich ">" schreiben, Danke! Die Variable "sortiert" hab ich mir einfach so gemerkt, als wir den Algo. das erste mal programmiert haben ^^ Ok dann versuch ich das Beispiel weiter!

Versteh ich das mit Code 22 Zeile insofern richtig, dass es feld1.length -1 sein muss, da ich das letzte Array ja mit nichts vergleichen kann?

edit: Und gleich noch eine Frage:

Jetzt möchte ich die Doppelten Zahlen ausgeben.
Das mache ich mit:
Java:
		for (int i = 0; i < feld1.length - 1; i++) {
			if (feld1[i] == feld1[i + 1]) {
				System.out.println("Doppelte Zahl:  " +feld1[i]);

			}
		}

Nur find ich diese Lösung nicht so schön, da mir die Doppelten Zahlen alle untereinander ausgegeben werden. Warum das so ist weiß ich eh. Durch die for-schleife wird das syso immer neu generiert.
Leider kenn ich aber keine Möglichkeit wie ich sonst noch durch das array gehen kann um dann nur 1 mal die Zahlen in einer Reihe ausgeben kann?

Und am allerschönsten würde ich es noch so finden: (wenn ich nur eine überschaubare kleine Anzahl von Zufallszahlen hab.

Java:
		for (int i = 0; i < feld1.length - 1; i++) {
			if (feld1[i] == feld1[i + 1]) {
				System.out.printf("Doppelte Zahl: %d ", feld1[i]);
			} else {
				System.out.println("Es gibt keine doppelten Zahlen");
			}
		}
Das Problem ist eh wie oben...mir wird x-mal untereinander "Es gibt keine doppelten Zahlen" ausgegeben; ich hätts aber gern nur 1 mal ^^
 
Zuletzt bearbeitet:

Zurück
Oben