While-Schleife geht in Endlosschleife über, warum?

steppix

Mitglied
Hallo zusammen, nachdem ich das letzte mal vor 6 Jahren etwas mit programmieren zu tun gehabt habe, wollte ich mich einfach noch mal mit der Programmiersprache Java beschäftigen. Doch irgendwie komme ich aktuell nicht weiter. Ich weiß nicht warum die nachfolgende Syntax, in einer Endlosschleife endet? Vielleicht kann mir einer von euch weiter helfen.

Java:
package schleifenzaehler;
public class schleife {

    public static void main(String[] args) {
   
        double a = 14;
        double b = 1;
        double c = 14;
   
        while (a>10) {
           
            a = c / (b * 1.1);
           
            System.out.println(a);
           
        }
       
    }

}
 
Zuletzt bearbeitet von einem Moderator:
Naja, egal wie häufig du die Schleife ausführst, `a` wird nach dem ersten Schleifendurchlauf immer denselben Wert 12.727.. haben, da sich ja an den abhängigen Variablen `b` und `c` nichts ändert...
 
die innerhalb der Berechnung stattfindende Erhöhung von b
Welche Erhöhung von b? Du multiplizierst b einfach mit 1.1. Aber, das Ergebnis davon wird ja nicht wieder `b` selbst zugewiesen, sondern ist einfach ein Wert für sich.
Es wäre sehr schlecht, wenn jede Operation mit mindestens einer Variablen als Operand, diese Variable immer implizit mitändern würde:
Java:
int a = 3;
int b = a * 2;
Das ändert ja auch nicht `a` zu 6.
 
Aso jetzt verstehe ich. Ich dachte b würde sich bei dem nächsten Schleifendurchgang auch den Wert mitholen (b vor durchgang der Schleife 1, nach dem ersten Durchlauf b=1,1). Aber dann war diese Annahme falsch.
 
Das kannst du z.B. erreichen mit:
Java:
while (a > 10) {
  a = c / (b *= 1.1);
  System.out.println(a);
}
oder übersichtlicher:
Java:
while (a > 10) {
  b *= 1.1; // <- oder b = b * 1.1
  a = c / b;
  System.out.println(a);
}
Ich dachte b würde sich bei dem nächsten Schleifendurchgang auch den Wert mitholen (b vor durchgang der Schleife 1, nach dem ersten Durchlauf b=1,1). Aber dann war diese Annahme falsch.
Du kannst dir in deinem Fall auch erstmal die Schleife wegdenken bzw. "unrollen". Dann wird vielleicht klar, warum das nicht so ist:
Java:
// einfach mal vier hintereinander folgende "Schleifendurchläufe":
a = c / (b * 1.1);
a = c / (b * 1.1);
a = c / (b * 1.1);
a = c / (b * 1.1);
 

Neue Themen


Zurück
Oben