2015-10-26 54 views
2

在編碼網站上有一個謎題,看起來很瑣碎,但當我解決它並提交時,它被標記爲錯誤,當參數或已通過該方法。我在邏輯中對以下問題做了什麼錯誤?使用mod操作符時遇到問題;我沒有得到我期待的結果

如果給定的非負數是3或5的倍數,則返回true,但不能同時爲兩者。使用% 「MOD」 操作 - 見介紹國防部

我的解決辦法:

public Boolean old35(int n) { 
    if(n % 3 == 0 || n % 5 == 0 && !(n % 3 == 0 && n % 5 == 0)){ 
    return true; 
    } 

    return false; 
} 

Codingbat的解決方案,沒有任何意義,我在所有:

public Boolean old35(int n) { 
    return n % 3 == 0^n % 5 == 0; 
} 
+0

'^'是「排他性的」 - 它表示「這些條件之一,但不是兩個」。 – khelwood

+0

您並未檢查「不是兩個」情況。 – csmckelvey

回答

6

&&運營商優先於||,所以它發生在!(n % 3 == 0 && n % 5 == 0)之後但在或||之前。由於45的確,它是35的倍數,所以!返回false。這是5的倍數,所以true & false產生false。這是3的倍數,因此truefalse產生true,根據要求不正確。

可以通過第一&&之前插入小括號強制||糾正你的解決方案:

// v       v 
if((n % 3 == 0 || n % 5 == 0) && !(n % 3 == 0 && n % 5 == 0)){ 

Codingbat的解決方案使用XOR運算符,^。這個操作符意味着其中一個或另一個是真實的,但不是兩個都完全符合要求。此外,沒有理由if;你可以直接返回布爾表達式。

2

您的解決方案几乎正確。你只需要括號:

if((n % 3 == 0 || n % 5 == 0) && !(n % 3 == 0 && n % 5 == 0)) 

沒有括號它被視爲

if(n % 3 == 0 || (n % 5 == 0 && !(n % 3 == 0 && n % 5 == 0))) 

^是排他性的或。 x^y表示xy爲真,但不是兩者都是。

1

返回(N%3 == 0 || N%5 == 0) & & (N%3 == 0 & & N%5 == 0)!;

您可以檢查兩個條件,然後通過與門傳遞這些條件的結果(& &)。

相關問題