2015-11-23 76 views
3

Java代碼:檢查x是否爲n的倍數的有效方法是什麼?

if(x !=0 && x!= n && x!= 2*n .... x!= n*n){ 
    //do something here 
} 

有沒有寫這個代碼,而不是這個長形的沒有更好的辦法?

該代碼基本檢查是否X!= n * Y其中,Y =任意自然數(0-N)

+1

您是否在尋找短代碼或高效代碼? – manetsus

+0

@maetsus在這種情況下最有效的代碼非常短! – ParkerHalo

+0

查看下面的答案,它既是短代碼又非常高效,因爲它使用模運算符(%)而不是循環。 – Tekkerue

回答

5

你可以在一個私有方法封裝該功能:

if (isDividableBy(x, n)) { 
    //... 
} 

與方法:

private boolean isDividableBy(int x, intn) { 
    for (int i = 0; i <= n; i++) { 
     if (x == i*n) 
      return false; 
    } 
    return true; 
} 

你能做出這樣更有效,如果你使用模運算符(%),但隨後的代碼變得不太可讀!

短的版本是:

if (x%n != 0 || x < 0 || x > n*n) { 
    // ... 
} 
+0

如果'x!= 0',你的'isDividableBy()'函數永遠不會返回。 – manetsus

+1

如果您不想創建無限循環,則可能需要增加i。 – Manu

0

你可以做到以下幾點:

if((n==0&&x!=0) || (n!=0 &&(x<0||x>n*n||x%n!=0)) { 
    //do your work here 
} 
4

使用循環會更有意義:

boolean isProd = false; 
for (int i = 0; i <= n && !isProd; i++) 
    isProd = (x == i * n); 
2

所以basicly你會想檢查是否x != 0,如果x不是n的倍數。 如果that's的情況下,你可以簡單地作出這樣利用餘數運算符的:

private boolean is_valid(long n, long x) { 
    // This condition will be valid if n is not a multiple of n 
    // and if the divisor of X/n is greater then n 
    if(x % n != 0 || n < x/n) { 
     return true; 
    } 
    return false; 
} 
3

只要告訴我你真的想和你寫的代碼做的。

如果您需要確認X is not a multiple of n,以下代碼將會執行。

float a = x * 1.0/n; 

if(Math.round(a) != a) { 
    // do something 
} 

而且加上when X < n*n, X is not a multiple of n,下面的代碼會做的條件。

if((x/n) > n || (x/n) < 0 || x % n != 0) { 
    // do something 
} 
1

當您的任何條件滿足時使用循環設置標誌。

int n=10; 
int x=2; 
boolean doThis = true; 
for(int i=0;i<=n;i++){ 
if(x==i*n) { 
    doThis =false; 
    break;  
}   
} 

if(doThis) { 
System.out.println("do this!");   
} 
0

這裏有沒有環一個很好的解決方案:

if ((x < n*n) && (x%n != 0)){ 
    ... 
} 

第一次檢查是確保x不大於n * n的上限值。

然後模運算符(%)給出x/n的餘數。如果餘數爲0,那麼x等於n的幾倍,並且不會進入if語句。

+0

這不會做OP的意圖......你爲什麼要確保「x不大於n * n的上限」? – ParkerHalo

+0

他的代碼中的最後一個條件是x!= n * n,我認爲這是一個上限。但是,如果他僅僅意味着這是一個任意的「大數」,並且他真的想要從0到無窮大的任意多個n,那麼可以取下第一個檢查並使用:if(x%n!= 0){。這將涵蓋n的整數倍,沒有上限。 – Tekkerue

相關問題