Zahlen sortieren in Java?


28.10.2020, 17:15

Ich habe jetzt nur den Teil eingefügt in dem es um das Anordnen der Zahlen ging und den Rest ausgelassen da mir dabei nicht das Verständnis fehlt.

1 Antwort

Ich schreib mal ein paar Kommentare in den Code, den du in eine andere Antwort geschrieben hast:

public static void main(String[] args) {
// Der Teil sollte klar sein. Hier fängt einfach das Programm an.

  Scanner meinScanner = new Scanner(System.in);
  // Ein Scanner ist einfach nur ein Objekt, was dir hilft einen InputStream
  // in handliche Brocken aufzuteilen. Du musst also nicht selbst aufpassen,
  // dass du mehr einlesen willst, als der Stream lang ist oder dass du
  // rauskriegen musst, wo ein Wert anfängt und endet. Du kannst dem Scanner
  // einfach sagen "gib mir die nächste Zahl" oder "gib mir die nächste Zeile"

  System.out.println("zahl 1, 2, 3: ");
  // Der Text "zahl 1, 2, 3: " wird angezeigt. Das ist für die Aufgabenstellung
  // wahrscheinlich optional.

  int a = meinScanner.nextInt();
  int b = meinScanner.nextInt();
  int c = meinScanner.nextInt();
  // die drei Werte für die Variablen a, b und c werden eingelesen.
  // Hier siehst du auch die Funktionsweise des Scanner-Objekts. 
  // Man gibt nur den Befehl, dass man die nächste Zahl haben will
  // und der Scanner schaut automatisch, wo die Zeichen, die die Zahl
  // darstellen anfangen und aufhören und wandelt sie in eine int-Variable um.

  int hilf;
  // Es wird einfach eine leere Variable namens "hilf" erzeugt. Die wird aber
  // bei diesem Beispiel nicht mal verwendet.

  // Hier wird dann angefangen, die Zahlen zu vergleichen und ggf. zu tauschen

  // wenn b kleiner als a ist, müssen sie getauscht werden
  if (b < a){
   a +=b;
   b = a-b;
   a = a-b;
  }

  // wenn c kleiner als b ist, müssen sie getauscht werden.
  if (c < b){
   c +=b;
   b = c-b;
   c = c-b;

   // Nach dem Tausch von b und c kann es vorkommen, dass b größer als a ist,
   // also wird das hier nochmal geprüft.
   if (b < a){
    a +=b;
    b = a-b;
    a = a-b;
   }
  }
  System.out.println(a + "," + b + "," + c);
  // Das Ergebnis mit der richtigen Reihenfolge von a, b und c wird ausgegeben.
 }
}

Bis auf die eigentliche Tauschroutine sollte alles verständlich sein. Ich finde es komisch, dass als Beispiel so eine unverständliche Routine benutzt wird, aber man kann das mal beispielhaft nachrechnen.

Beispiel:

a = 7
b = 5

Da b kleiner als a ist, sollen die Werte jetzt getauscht werden.

a += b (bedeutet: a = a + b), also a = 12
b = a-b, also b = 7
a = a-b, also a = 5

Das funktioniert zwar, aber ich würde für einen Anfänger übersichtshalber eher die Variante mit der Hilfsvariable nehmen. Immerhin wurde ja im Beispielcode schon die Variable "hilf" erzeugt.

hilf = a; // Wir speichern den Wert von a in der Hilfsvariable
a = b; // damit wir den Wert von a mit dem Wert von b überschreiben können
b = hilf; // und speichern danach den ursprünglichen Wert von a in b   

Später werdet ihr wahrscheinlich noch die ganzen standardmäßigen Sortieralgorithmen durchgehen (Bubblesort, Insertionsort, Selectionsort, Mergesort, Quicksort und wie sie alle heißen)

Im Normalfall kannst du aber einfach den integrierten Sortieralgorithmus von Java benutzen und musst nicht genau wissen, wie er funktioniert. Die Aufgabe würde also im Prinzip einfach so aussehen:

List<Integer> liste = Arrays.asList(meinScanner.nextInt(), meinScanner.nextInt(), meinScanner.nextInt());
liste.sort(Comparator.naturalOrder());
System.out.println(liste);