2016-09-19 2 views
-4

Warum erzeugt das folgende eine Endlosschleife?Java || While-Anweisung mit Infinite Loop

int sum = 0;  
    int k = 1; 
    while (sum < 12 || k < 4) 
    sum += k; 

    System.out.println(sum); 

ich die Ausgabe 12 wäre übernehmen würde, sobald Summe 12 erreicht, während k auf 1

+0

Einrückung Problem .... – Rishi

+7

'k' ist immer noch weniger als 4, so bleibt der Zustand wahr. – resueman

+1

Inkrement k Wert – Rishi

Antwort

1

bleibt, sollten Sie verwenden, während (Summe & k < 4), sonst K < 4 wird immer wahr und die Schleife wird weiter ausgeführt.

Wenn Sie ODER verwenden, werden die Schleifen fortgesetzt, wenn eine dieser Bedingungen zutrifft. Die Bedingungen sind so, dass die Schleife fortgesetzt wird und nicht angehalten wird.

false || true == true 
true || true == true 
false || false == false 

false && true == false 
true && true == true 
false && false == false 

die resultierende wahr oder falsch bestimmt, ob die Schleife

+0

Aber, weil es eine OR-Anweisung ist, würde es nicht überprüfen, ob Summe <12 OR k <4? –

+0

Es war eine Multiple-Choice-Frage –

+0

@Kyle McAllister, wenn Sie OR verwenden, werden die Schleifen fortgesetzt, wenn eine dieser Bedingungen zutrifft. Die Bedingungen sind so, dass die Schleife fortgesetzt wird und nicht angehalten wird. falsch || true == true –

1

k fortgesetzt wird nicht erhöht.

int sum = 0; 
int k = 1; 

while (sum < 12 || k < 4) { 
    sum += k; 
    k++; 
} 

System.out.println(sum); 
+0

Warum wäre das nötig, würde die Schleife nicht brechen, wenn entweder Summe <12 ODER k <4? Außerdem würde dies eine andere Summe ergeben? –

+0

@KyleMcAllister die Schleife wird fortgesetzt, wenn einige der Bedingungen erfüllt sind – amchacon

0

Ihr Wert k bleibt über alle Iterationen hinweg konstant.

Ihre Schleifenbedingung ist sum<12 oder k<4. Da Sie den k-Wert nicht über Iterationen hinweg ändern, ist er immer kleiner als 4 und die Schleife läuft weiter.

1

In Ihrem Code k wird nicht erhöht, so bleibt die Bedingung wahr. Deshalb ist deine Schleife unendlich.

int sum = 0; // sum is 0 
    int k = 1;  // k is 1 
    while (sum < 12 || k < 4) { 
    sum += k; // sum is incremented by 1 each time it loops 
    } 

System.out.println (Summe);

Aber hier ist Ihr Wert von k immer noch weniger als 4. Also Schleifen unendlich.

EDIT: Nun, ich mache es ein bisschen mehr klar

Hier Ihre while Schleife ist

while (sum < 12 || k < 4)

Es bedeutet entweder sum < 12 hat, wahr zu sein oder k < 4 hat wahr zu sein, Schleife die while Schleife.

Und hier ist Ihre k < 4 Bedingung immer noch wahr. deshalb bleibt die Schleife endlos.

+0

Richtig, es war eine Multiple-Choice-Frage (nicht mein Code). Sobald die Summe 12 erreicht, würde das nicht ausreichen oder die Aussage beenden und beenden? –

+1

Nein, beide sollten wahr sein, um die Schleife zu beenden. –

+0

Hab es, danke. Ich dachte völlig falsch. Ich dachte, es würde brechen, wenn 1 ODER die andere zufrieden war. Es ist tatsächlich, während das eine oder andere wahr ist, es geht weiter, nicht bricht. –

0

Sie verwenden die || Erklärung. Lesen Sie jegliche Dokumentation über "|| & &" || => ODER. Wenn die linke Seite der Aussage wahr und richtig ist, ist falsch = wahr (Verwendung ||)