2016-09-26 9 views
-2

私はちょうどJavaを学び始めたので、私の質問はおそらく信じられないほど馬鹿です。なぜループは5の倍数を無視しますか?

私は最も単純な問題の1つを解決しようとしています。

3または5の倍数だけが合計で考慮されるように前のプログラムを変更します。 3、5、6、9、10、12、15 N =ここ17

は私のコードがある:私はそれを実行すると

import java.util.Scanner; 

public class NewProblem { 
    public static void main (String[] args) { 

     Scanner scan = new Scanner(System.in); 
     int n = scan.nextInt(); 

     for (int i = 0; i < n; i++) { 
      if (i % 5 == 0 || i % 3 == 0) { 
       System.out.println(i); 
      } 
      else { 
       i++; 
      } 
     } 

    } 
} 

、これは3つのだけ倍数を示します。

だからそれだけで5

何が問題になっていますが、すべての倍数を無視します。たとえば、ここでのn = 17の出力がありますか? 質問が本当にばかげている場合は再び申し訳ありません。

+5

elseにはi ++が含まれています。forループ中に1つの要素 –

+0

をスキップします。ループが再び開始されると、自動的にiがインクリメントされます。あなたが 'else'ステートメントで' i ++ 'を実行すると、あなたは1をインクリメントし、ループのために1をインクリメントします。たとえば、 'i = 1'の場合、' else'文に落ちて 'i = 2'を返します。ループが戻ってくると、 'i = 3'が得られます。だから、 'i = 2'は即座にインクリメントされたので、あなたのコードで実際には処理されませんでした。 – Tuma

+0

「10」は「3」ではなく「5」の倍数である。 – Ravikumar

答えて

2

elseブロックでiを増やす必要はありません。forループが繰り返すたびに増加します。

3

または5で割り切れない場合は、「i」に1を加算するelseステートメントが問題です。さて、あなたのメソッドが何かを見てみましょう。n = 5。最初に、forループは、53で割り切れる0で実行されるため、forループが再び実行され、今度はi = 1になります。 15または3で割り切れないので、else文がi1を追加する、と呼ばれていますが、すでにこれを行うにはforループを設定しておりますので、それが効果的i = 2を飛ばし、i2を追加し、そうでありません2を最初に印刷しないでください。 i = 3ifステートメントが通常のように印刷され、forループが再び発生し、今度はi = 4となります。 forループがi = 6その結果、1とELSE文1が追加されますので、elseステートメント火災が再び効果的i = 5を飛ばし、i2を追加するように4は、3または5で割り切れません。ここに問題があります。 forループは、ループするたびにiに1を追加するため(forステートメントの最後のセクションにはi++と記載されています)、一部の数値がスキップされます。 elseステートメントを削除するだけで、コードは正常に動作します。

関連する問題