2016-09-26 67 views
-2

我剛開始學習Java,所以我的問題可能非常愚蠢。爲什麼循環會忽略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++; 
      } 
     } 

    } 
} 

當運行它,它示出了三個唯一的倍數。例如,下面是輸出爲N = 17:

所以它只是忽略了5

什麼是錯的倍數? 對不起,如果這個問題真的很愚蠢。

+5

else包含i ++ - 在for循環期間跳過一個元素 –

+0

,當循環再次開始時,「i」自動遞增。當您在'else'語句中執行'i ++'時,您將增加i,然後由於循環而再次增加1。例如,當'i = 1'時,你落在'else'語句並得到'i = 2'。然後,當循環回來時,你會得到'i = 3'。所以'i = 2'從來沒有真正被你的代碼處理過,因爲它立即增加了。 – Tuma

+0

'10'是'5'而不是'3'的倍數。 – Ravikumar

回答

2

您不需要在else塊中增加i,它在for循環的每次迭代中都會增加。

3

這裏的問題是else聲明,如果它不能被35整除,它將爲「i」加1。現在,讓我們看看你的方法如果n = 5。首先,for循環以0運行,它可由53除盡,因此for循環再次運行,現在運行i = 11是不是53整除,所以else語句被調用時,添加1i,但既然你已經設置了for循環要做到這一點,這將有效地增加2i,跳過i = 2,而你沒有請注意,因爲2不應該首先打印出來。然後i = 3if語句像正常打印一樣,for循環再次觸發,這次是i = 4。而4不整除35,所以else聲明再次開火有效增加2i因爲for環加一和else語句之一,導致i = 6,跳過i = 5。這是問題所在。由於for循環在每次循環時都已經添加了一個到ifor語句的最後一部分顯示爲i++),導致跳過了一些數字。只需刪除else聲明,你的代碼應該可以正常工作。