打印数字可被2整除但不能被3整除?

时间:2014-09-20 04:26:23

标签: java if-statement

for (int i=n1; i < n2; i++){
    if (i % 2 == 0){
        System.out.println(i);
    }
}

此代码打印出n1和n2之间的所有数字(它们是随机生成的),它们都可以被2和3整除,但我只想打印出可被2整除的数字。我该怎么做?

5 个答案:

答案 0 :(得分:2)

你真的在那里。

你需要第二个条件,你要求数字可被3整除。它看起来像这样:

!(i % 3 == 0)

现在,如果两个条件都为真,则需要一个布尔运算符才能返回true。那,我将作为练习留给读者。

答案 1 :(得分:0)

(其他人已经给出了正确答案,但我会尝试更自然地解释一下)

对于计算机,您需要以他们能够理解的方式编写句子。你需要转换逻辑句子,如&#34; divise by 2而不是3&#34;更基本的版本,仅使用&#34; not&#34;,&#34;和&#34;和&#34;或&#34;。在您的具体情况下,您想说the numbers that are divisible by 2 AND NOT divisible by 3

正如您已经注意到的那样,N%X!=0是一种(丑陋的)写N is divisible by X的方式。在Java中,我们使用!来说not&&来说and

这样,(N is divisible by 2) AND NOT (N is divisible by 3)可以写成(N % 2 == 0) && !(N % 3 == 0)。但是我们还有X not equal Y运算符(X!=Y),它相当于NOT (X equal Y)但更容易理解,导致此代码:

if ((i % 2 == 0) && (i % 3 != 0)) {
    System.out.println(i);
}

答案 2 :(得分:0)

更有效的解决方案是打印偶数(每秒)不是3的倍数(每三个数字)

for (int i = 2; i < n; i += 6) {
     System.out.println(i);
     if (i + 2 < n)
         System.out.println(i + 2);
}

模数操作很昂贵,每次循环打印两个数字,而不是每六个循环打印两个数字。

答案 3 :(得分:0)

我使用位运算符来获得最佳性能(如果(i & 1) == 0 i 偶数)。因为二进制中的偶数总是有0位数。

public class Example {

    public static void main(String[] args) {
        int n1 = 0;
        int n2 = 100;
        for (int i = n1; i < n2; i++) {
            if (((i & 1) == 0)) {
                if (i % 3 != 0) {
                    System.out.print(i + " ");
                }
            }
        }
    }
}

//    Result:
//        2 4 8 10 14 16 20 22 26 28 32 34 38 40 44 46 50 52 56 58 62 64 68 70 74 76 80 82 86 88 92 94 98 

有更好的方法,例如3534%3 == 0,我们有:所有数字的总和(3 + 5 + 3 + 4)= 15,和15%3 == 0 ...让&#39;代码如下。

当n很大时,例如n2 = 99999999999999,使用所有数字的总和是(9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9)%3 == 0,位运算符非常有意义:)

答案 4 :(得分:-1)

使用逻辑和比较运算符&&

for (int i=n1; i < n2; i++){
    if (i % 2 == 0 && i % 3 != 0) {
        System.out.println(i);
    }
}

你的if条件现在询问“我是否可以被2整除,并且不能被3整除”