2016-07-08 2 views
-3

出力:私が得る10 20 30 40 50 .............. が出力:0私のコードは正しいと思いますが、私はゼロになっていますか?私が欲しい

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

あなたのコードがしていることを言葉で教えてもらえますか? –

+0

あなたのコードを精神的に調べ、各ステップが何をしているか教えてください。 –

+1

最初の反復(i = 0): 'while'節は真で、' 0'を出力します。 2回目の繰り返し(i = 1): 'i%10 == 0'がfalseで' while'節はfalseでループが終了します。 – Andreas

答えて

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

のみ印刷結果論理式で接続された式と&&

つまり、を意味します。はすべて真でなければなりません。

i1になったときの2つのサブ式を作成します。最初のものは真ですが、2番目のもの(110の倍数ではありません)。つまり、その時点でループが終了します。あなたはなぜ0が表示されているのか説明します。

これを修正するには、ループ制御がだけ最初にに依存するため、2つのサブ式を分離する必要があります。ただし、の印刷は、10の倍数(2番目)でのみ発生するようにしてください。

そうで、ご希望の出力10 20 30 40 50ごとに想定し、あなたが(それは、結局、10の倍数であるにも関わらず)出力の一つとして0を望んでいん、次の擬似コードは、トリックを行います:

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 

あなたがを行う場合は、出力に含ま0は、単に最初に0iを設定し、あなたが0 10 20 30 40 50が表示されますたいです。

私は上記のコードをいくつかの説明のクラスワークであると仮定して擬似コードとして残しました。これを手続き型言語に変換するのは比較的簡単です。

+0

ありがとうございました..なぜ私は理解しています:)) –

1
i % 10 == 0 

これは、上の偽と評価されます2番目のループので、しばらくしてください。私は

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

これは、iがnまでのすべての方法をインクリメントすることができます...あなたはこれをしたいと思いますが、それでしょう。これは、2である継続条件であるi % 10 == 0

1

whilewhileifの両方を使用しようとしています。試してください。

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、最初の文章を整理したいかもしれません。 OPは* /を両方使うのではなく、あなたがそれらを使うべきであると思ったと思います。 – paxdiablo

0

ループは、i = 0の場合に1回だけ実行されます。それでおしまい。

関連する問題