2014-09-20 73 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,位操作符是非常有意義的:)

相關問題