2014-09-20 63 views
0
for (int i=n1; i < n2; i++){ 
    if (i % 2 == 0){ 
     System.out.println(i); 
    } 
} 

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

+0

@SotiriosDelimanolis:呃...... 30 ... – Makoto 2014-09-20 04:27:45

+5

你知道'&&'和'!'操作符吗? – Mephy 2014-09-20 04:27:46

+0

3或9将不会被打印。它只打印2整除的数字! – AlexS 2014-09-20 04:29:40

回答

-1

使用逻辑和比较操作&&

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

if条件现在询问“我是被2整除,而不是被3整除”

+0

谢谢这是我需要的。 – Bane 2014-09-20 04:34:30

+0

为什么downvote? – Foggzie 2014-09-22 19:09:15

2

你从字面上一半。

你需要第二个条件中,你强制要求的数量被3整除这将是这个样子:

!(i % 3 == 0) 

现在,你需要一个布尔操作来只返回,如果真这两个条件都是真的。那我将作为练习留给读者。

0

(其他人已经给出了正确的答案,但我会尽量多一点自然地解释)

对于计算机,你需要写一个句子中,他们能理解的方式。您需要将逻辑句子(如“divise by 2 but not by 3”)转换为更基本的版本,仅使用单词“not”,“and”和“or”。在你的具体情况下,你想说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); 
} 
0

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

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

模量操作是昂贵的,并且这将打印两个数与每个循环,而不是每六个环两个数字。

+1

我更喜欢这个解决方案。但是如果n很奇怪会发生什么?例如。让'n = 3'。循环将不会触发,因为条件不成立。 – Makoto 2014-09-20 05:03:54

+0

@Makoto是真的。彼得的代码很好。 :) – 2014-09-20 05:09:43

+0

@Makoto好点,它将无法打印出最后一些数字。 – 2014-09-22 18:01:40

0

我使用位运算符来获得最佳性能(如果(i & 1) == 0偶数)。因为偶数中的偶数总是有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总和...让我们的代码遵循这个。

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

相关问题