为什么循环忽略五的倍数?

时间:2016-09-26 18:58:34

标签: java

我刚刚开始学习Java,所以我的问题可能非常愚蠢。

我试图解决一个最简单的问题。

  

修改以前的程序,使其只有三个或五个的倍数   被视为总和,例如n = 17的3,5,6,9,10,12,15

这是我的代码:

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的输出:

0 3 6 9 10 15

所以它只是忽略了5的所有倍数。

出了什么问题? 如果问题真的很愚蠢,请再次抱歉。

2 个答案:

答案 0 :(得分:3)

这里的问题是else语句,它会将一个语句添加到&#34; i&#34;如果它不能被35分割。现在,让我们看看您的方法在n = 5时的作用。首先,for循环以0运行,53可分,因此for循环再次运行,现在i = 115无法将3整除,因此会调用else语句,将1添加到i,但由于您已经设置for循环来执行此操作,它会有效地将2添加到i,跳过i = 2,并且您没有注意到,因为2不应该首先打印出来。然后i = 3if语句会像平常一样触发打印,for循环再次触发,这次i = 4。并且4不能被35整除,因此else语句会再次触发,有效地将2添加到i,因为{{1}循环添加一个和else语句一,导致for,跳过i = 6。这就是问题所在。由于i = 5循环每次循环时都会向for添加一个循环(i语句的最后一部分显示for),导致某些数字被跳过。只需删除i++语句,您的代码就可以正常工作。

答案 1 :(得分:2)

你不需要在else块中增加i,它会在for循环的每次迭代中增加。