不理解模数如何工作(Eclipse)

时间:2013-11-20 22:30:18

标签: java modulus

我刚刚开始介绍Java的入门教程,并且已经有一个关于什么(在我看来)作为奇怪行为的问题。有人可以澄清我是如何错误地看待这个工具的吗?

为什么这不输出奇数:

        for (int i = 0, j = 0; i < 100; ++i){
            if ( i % 2 != 0){
                System.out.print(i + "\t");
            }
            ++i;  ++j;
            if (j >= 10){
                System.out.println();
                j = 0;
            }
        }

但这确实是数字:

        for (int i = 0, j = 0; i < 100; ++i){
            if ( i % 2 == 0){
                System.out.print(i + "\t");
            }
            ++i;  ++j;
            if (j >= 10){
                System.out.println();
                j = 0;
            }
        }

即使是这样的东西也行不通:

        for (int i = 0, j = 0; i < 100; ++i){
            if ( i % 2 > 0){
                System.out.print(i + "\t");
            }
            ++i;  ++j;
            if (j >= 10){
                System.out.println();
                j = 0;
            }
        }

3 个答案:

答案 0 :(得分:2)

每个循环增加i两次 - 一次在for循环本身,一次在正文中间。

最终结果是当你到达i时,if ( i % 2 != 0){本身只是偶数(0,2,4,...)。

删除i的体内增量;只在for循环本身增加。变化

++i;  ++j;

++j;

答案 1 :(得分:1)

因为您要递增i两次,首先是for,第二位是if之间。因此,您的i仅循环偶数。删除第二个增量,它将按预期工作。

同时你的j只增加一次,所以你应该每行观察10个数字。

答案 2 :(得分:1)

你的主要问题是“i ++”在每次循环迭代中出现两次,所以只考虑I的其他每个值(即偶数)。从循环体中删除I ++。