Java: Wie kann ich an diese Aufgabe herangehen?

regex9  23.02.2021, 18:42
  1. Wo ist dein Ansatz?
  2. Worin liegt dein konkretes Problem / Woran scheiterst du?
rockyoderrambo 
Fragesteller
 23.02.2021, 20:27

Danke das sie sich Zeit genommen haben. Also mein Problem ist, das ich nichteinmal weiß wie ich anfangen soll und was ich machen soll also weiß ich sozusagen nichts.


3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Der Lehrer will das wir eine Klasse Bubblesort, die die 30 Zufallszahlen von 1-100 erstellt und diese anzeigt programieren.

Fange erst einmal damit an. Eine leere Klasse mit dem Namen anzulegen, dürfte kein Problem darstellen.

Für deine Zufallszahlen brauchst du, so wie es die Aufgabe schon offenbart, ein Array, welches 30 Elemente aufnehmen kann.

Ein Beispiel für ein Zahlenarray mit zwei Elementen, dessen Felder einzeln befüllt werden:

int[] numbers = new int[2];
numbers[0] = 3;
numbers[1] = 11;

Nun sollen in dein Array aber Zufallszahlen zwischen 1 und 100. Für das Generieren von einer Zufallszahl kannst du die Funktion Math.random verwenden. Um einen Wert zwischen zwei Zahlen zu berechnen (die untere Grenze inklusiv, die obere Grenze exklusiv), kann diese Formel genutzt werden:

 Alternativ könntest du ebenso die Klasse Random einsetzen.

Um nicht jede Zahl in mehreren Zeilen einzeln einen Wert zuordnen zu müssen, empfiehlt sich der Einsatz einer Schleife. Schau in deine Unterlagen, damit habt ihr garantiert bereits gearbeitet.

All das könntest du bis dahin im Konstruktor oder einer Methode deiner Klasse vornehmen.

Außerdem soll diese die Zahlen der Größe nach ordnen und dann außgeben.

An sich wäre es klug gewesen, die Zahlen schon beim Einfügen in das Array zu sortieren. Doch die Aufgabe verlangt wohl eine Sortierung via Bubblesort-Algorithmus. Und wie dir bereits geschrieben wurde, du findest dazu tonnenweise Material. Du kannst dir den Algorithmus sogar vortanzen lassen. Auf Wikipedia findest du einen Algorithmus (in Pseudocode), sowie eine Beschreibung und eine animierte Grafik zum Sortierverfahren.

Ich würde dir empfehlen, dich erst mit eine dieser Quellen zu befassen und dann die Vorschrift in Code umzusetzen. Geh schrittweise vor. Erstelle dir, falls es dir besser hilft, erst einen Programmablaufplan.

Eine der wenigen Hürden beim Bubblesort ist der Tausch zweier Werte im Array. Du hast bspw. dieses Array:

[ 7 4 ]

und möchtest nun beide Elemente miteinander vertauschen. Überlege dir erst einmal selbst eine Lösung. Als Gleichnis könntest du folgendes Rätsel nehmen: Du hast zwei Gläser vor dir stehen. Ein Glas beinhaltet warmes Wasser, das andere Glas hingegen kaltes. Von beiden Gefässen soll der Inhalt vertauscht werden (ohne dass sich die Temperatur der Flüssigkeiten ändert).

1: Nach jedem Tausch das gesamte Array ausgeben, damit man den Tausch nachvollziehen kann

Dafür würde ich mir eine eigene Funktion schreiben, die das Array übergeben bekommt / auf dieses Zugriff hat. Wenn du das Befüllen mit Zufallszahlen geschafft hast, schaffst du auch diese Ausgabe.

2: Zuerst abfragen ob auf oder absteigend sortiert wird und dann entsprechend sortieren.

Eingaben vom Nutzer lassen sich mit einem Objekt der Klasse Scanner aufnehmen. Ich bin mir sicher, dass du dieses (oder eine andere Methode) bereits kennst.

Die Sortierrichtung entscheidet sich anhand des Vergleichs der jeweils beiden Elemente je Zug. Dies soweit nur als Tipp.

Es gibt buchstäblich tausende Erklärungen und ausprogrammierte Beispiele von Bubblesort im Web. In jeder erdenklichen Sprache, natürlich auch Java. Hier nur ein paar Beispiele:

https://falconbyte.net/blog-java-bubblesort.php

https://javabeginners.de/Algorithmen/Sortieralgorithmen/Bubblesort.php

https://www.turais.de/bubble-sort-in-java/

Also was genau ist das Problem, bei dem du steckst? Verstehst du den Algorithmus nicht oder die Umsetzung? Was hast du bisher geschafft?

int n = array.length;

while(n > 0){

for(int i = 1; i < array.length; i++){

if(array[i] <= array[i-1]){

int left = array[i-1];

int right = array[i];

array[i] = left;

array[i-1] = right;

}

}

n--;

}

Im schlechtesten Fall ist die Ordnung genau umgekehrt und man muss n-1 mal alle möglichen Vertauschungsprozesse (for-Schleife) nach rechts durchführen.

Stabilität - also gleiche Werte quasi unvertauscht - wird durch <= anstatt bloß < als Bedungung bewirkt.

Mach dir nun klar, warum das Austauschen funktioniert und warum genau n-1 mal durchgegangen wird, und warum "while" und "for" dazu passen.

Woher ich das weiß:Studium / Ausbildung