2016-07-08 5 views
-3

Ausgabe, die ich will: 10 20 30 40 50 .............. Ausgabe, die ich bekomme: 0Ich denke mein Code ist korrekt, aber ich bekomme immer Null?

public class HelloWorld 
{ 
public static void main(String[] args) 
    { 
    final int n = 50; 
    int i= 0; 
    while(i <= n && i % 10 == 0) 
    { 
     System.out.println(i); 
     i++; 
    } 
} 
} 
+1

Können Sie uns in Worten sagen, was Ihr Code macht? –

+0

Gehen Sie mental durch Ihren Code und sagen Sie uns, was jeder Schritt macht. –

+1

Erste Iteration (i = 0): 'while'-Klausel wahr und es druckt' 0'. Zweite Iteration (i = 1): 'while'-Klausel ist falsch, weil 'i% 10 == 0' falsch ist und die Schleife endet. – Andreas

Antwort

3
while(i <= n && i % 10 == 0) 

Dies ist die Fortsetzungsbedingung ist, die zwei ist Ausdrücke verbunden durch logische und &&.

Das bedeutet beide müssen wahr sein, für die ganze Sache wahr zu sein.

Berechnen Sie nun die zwei Unterausdrücke für, wenn i1 wird. Die erste wird wahr sein, aber nicht die zweite (1 ist kein Vielfaches von 10), was bedeutet, dass die Schleife an diesem Punkt endet. Das erklärt, warum Sie nur 0 sehen.

Um es zu beheben, müssen Sie die zwei Unterausdrücke trennen, da die Schleifensteuerung nur auf der ersten abhängt. Allerdings wollen Sie immer noch Drucken passieren für ein Vielfaches von zehn (die zweite).

So, wie pro Ihre gewünschte Ausgabe unter der Annahme 10 20 30 40 50, Sie nicht0 als einer der Ausgänge wollen (obwohl es sich als immerhin ein Vielfaches von 10), die folgende Pseudo-Code wird den Trick :

set n to 50, i to 1 
while i is less than or equal to n: 
    if the remainder when i is divided by 10 is 0: 
     output i 
    increment i 

Wenn Sie tun gesetzt in der Ausgabe enthalten0 wollen, einfach zunächst i-0, und Sie werden 0 10 20 30 40 50 sehen.

Ich habe den Code oben als Pseudo-Code in der Annahme, dass dies Klassenarbeit einer Beschreibung ist - es sollte relativ einfach, das in jede Verfahrenssprache zu verwandeln.

+0

Danke .. jetzt verstehe ich warum :)) –

1
i % 10 == 0 

Diese auf die zu falsch auswertet zweite Schleife, so wird die Weile nicht weiter. Ich glaube, Sie dies wünschen ...

final int n = 50; 
    int i= 0; 
    while(i <= n) 
    { 
     if (i % 10 == 0) { 
      System.out.println(i); 
     } 
     i++; 
    } 

Dies ermöglicht i bis n den ganzen Weg zu erhöhen, aber es wird nur zu Drucken, wenn i % 10 == 0

1

Sie versuchen, die while und sowohl eine while als auch eine if zu verwenden. Versuchen Sie

public class HelloWorld { 
    public static void main(String[] args) { 
    final int n = 50; 
    int i = 0; 
    while (i <= n) { 
     if (i % 10 == 0) { 
     System.out.println(i); 
     } 
     i++; 
    } 
    } 
} 
+1

Eli, möchten Sie vielleicht den ersten Satz aufräumen. OP ist nicht * mit * beiden während/wenn, ich nehme an, du meintest, sie * sollten * das verwenden. – paxdiablo

0

Loop-Lauf für einmal nur für i = 0. Das ist es.

Verwandte Themen