Schleifen - Java

  • Hey,

    und zwar, hab ich ne frage zu schleifen in Java.

    Folgender code:

    Da habe ich 2 funktionen erstellt welche 1mal mit while-schleife und 1mal mit for-schleife zahlen ausgiebt. Alles soweit gut. Jedoch wird immer eine zahl mehr als die bedingung zulassen sollte ausgegebn.

    Die Ausgabe von der while schleife ist :

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    von for schleife :

    0
    1
    2
    3
    4
    5


    Ich sag doch bei while schleife das alle zahlen ausgegeben sollen bis sie kleiner als 20 sind, d.h. letzte zahl sollte ja 19 sein. Warum wird dann da 20 ausgegeben ?
    Das selbe bei der for schleife.

    Weiß wirklich nicht warum das so ist.

    Stef

    • Offizieller Beitrag

    Naja, wenn zahl = 19 ist, wird die ja in der while verarbeitet und durch das zahl++ um ein erhöht, was 20 ergibt.
    An der Stelle wird das zwar nicht ausgegeben, aber Du gibst den letzten Wert von zahl zurück, was wiederum in der main() ausgegeben wird. Und das ist die 20...

  • Aha. ok. Ja aber nach meiner bedingung darf es doch die zahl 20 nicht geben. Ich return also den letzten wert der while schleife und das sollte doch die 19 sein. Ok es ist ja klar das beim letzten durchlauf geschaut wird ob man 19 nochmal erhöhen kann mit zahl++ aber das sollte nach der bedingung nicht passieren. Also muss doch 19 rauskommen.

  • Da die Überprüfung der Zahl vor dem erhöhen geschieht ist das schon richtig so. Die Bedingung der Schleife hat nichts damit zu tun was in der Schleife passiert.

    • Offizieller Beitrag
    Zitat

    Ok es ist ja klar das beim letzten durchlauf geschaut wird ob man 19 nochmal erhöhen kann mit zahl++ aber das sollte nach der bedingung nicht passieren. Also muss doch 19 rauskommen.

    Nein, Im letzten Durchlauf hast Du 20, soweit hast Du es ja verstanden. Aber danach gibst Du zahl per return zurück! Und zahl ist in dem Moment 20.
    Die Ausgabe der 20 geschieht nicht in der while()-Verarbeitung, sondern in der Haupt Funktion, wie ich Dir schon sagte:

    Code
    public static void main(String[] args) {
    
            System.out.println(whileschleife()); // <-- HIER passiert die Ausgabe von "20"!
    
            System.out.println("_____________________________");
    
            System.out.println(forschleife());
    
    
        }
  • Das simpelste wäre die Bedingung der Schleife um 1 zu reduzieren. Kannst aber auch vor dem return noch eine If Anweisung hinzufügen, die das überprüft/abfängt, schön wäre das aber nicht.

    • Offizieller Beitrag

    Nein, das simpelste wäre den Rückgabewert einfach nicht ausgeben zu lassen oder aus der generell zahl zu decrementieren

    Wobei ich das nicht ausgeben für sinnvoller halte, denn zum Einen in der Methode Ausgaben zu machen und in der Rückgabe, ist schon irgendwo ein Gedankenfehler...

  • Die Ausgabe hatte ich jetzt einfach mal als Bedingung angesehen, überhaupt nicht aufgefallen, dass er da eigentlich doppelt ausgibt.
    Die do while Lösung aus der Mail fand ich auch schön.

    Aber einfach die Zahl erst nach der Ausgabe zu erhöhen, ja das geht natürlich.

    Fand des alles so banal, dass ich es mir gar nicht im Detail angeschaut habe.
    Asche auf mein Haupt, sorry.

    Greets
    Marc

  • Hi,

    ich habe es nun raus. Wie Arne schon gesagt hat, die 20 wird erst/immer bei der ausgabe der methode in der main-methode ausgegeben. Habe nun die methode ohne System.out.printLn(); ausgeben lassen, aufgerufen. Und nun kommt immer die richtige Zahl raus:

  • Auf Schleifen greift man in der Programmierung dann zurück, wenn eine bestimmte Anweisungen oder Operationen beliebig oft wiederholt werden sollen. In Java gibt es drei relevante Schleifen-Typen. Je nach Einsatzszenario entscheidet man sich für eine der drei Schleifen:

    • For-Schleife
    • While-Schleife
    • Do-While-Schleife

    Nachfolgend werden die einzelnen Schleifen-Varianten vorgestellt. Den Anfang macht die For-Schleife.