2016-09-26 62 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声明,你的代码应该可以正常工作。