Java代碼:檢查x是否爲n的倍數的有效方法是什麼?
if(x !=0 && x!= n && x!= 2*n .... x!= n*n){
//do something here
}
有沒有寫這個代碼,而不是這個長形的沒有更好的辦法?
該代碼基本檢查是否X!= n * Y其中,Y =任意自然數(0-N)。
Java代碼:檢查x是否爲n的倍數的有效方法是什麼?
if(x !=0 && x!= n && x!= 2*n .... x!= n*n){
//do something here
}
有沒有寫這個代碼,而不是這個長形的沒有更好的辦法?
該代碼基本檢查是否X!= n * Y其中,Y =任意自然數(0-N)。
你可以在一個私有方法封裝該功能:
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) {
// ...
}
你可以做到以下幾點:
if((n==0&&x!=0) || (n!=0 &&(x<0||x>n*n||x%n!=0)) {
//do your work here
}
使用循環會更有意義:
boolean isProd = false;
for (int i = 0; i <= n && !isProd; i++)
isProd = (x == i * n);
所以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;
}
只要告訴我你真的想和你寫的代碼做的。
如果您需要確認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
}
當您的任何條件滿足時使用循環設置標誌。
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!");
}
這裏有沒有環一個很好的解決方案:
if ((x < n*n) && (x%n != 0)){
...
}
第一次檢查是確保x不大於n * n的上限值。
然後模運算符(%)給出x/n的餘數。如果餘數爲0,那麼x等於n的幾倍,並且不會進入if語句。
這不會做OP的意圖......你爲什麼要確保「x不大於n * n的上限」? – ParkerHalo
他的代碼中的最後一個條件是x!= n * n,我認爲這是一個上限。但是,如果他僅僅意味着這是一個任意的「大數」,並且他真的想要從0到無窮大的任意多個n,那麼可以取下第一個檢查並使用:if(x%n!= 0){。這將涵蓋n的整數倍,沒有上限。 – Tekkerue
您是否在尋找短代碼或高效代碼? – manetsus
@maetsus在這種情況下最有效的代碼非常短! – ParkerHalo
查看下面的答案,它既是短代碼又非常高效,因爲它使用模運算符(%)而不是循環。 – Tekkerue