Sahte kodda bir örnek olarak:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
Negatif olmayan tamsayılar için remainder operator %
komutunu kullanabilirsiniz. Tam örneğiniz için:
if ((a % 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
Bu tek bir astarla basitleştirilebilir:
isEven = (a % 2) == 0;
Sözde kodunuzun asgari Java kodunda gösterimi;
boolean isEven = a % 2 == 0;
Şimdi onu bileşenlerine ayıracağım. Java'daki modulus operatörü, yüzde karakteridir (%). Bu nedenle int% int almak başka bir int döndürür. İkili eşittir (==) operatörü, bir çift ints gibi değerleri karşılaştırmak için kullanılır ve bir boole döndürür. Bu daha sonra 'isEven' boolean değişkenine atanır. Operatör önceliğine dayanarak, modül karşılaştırmadan önce değerlendirilecektir.
Diğer herkes zaten cevabı verdiğinden, biraz ek bağlam ekleyeceğim. % "modül" operatörü gerçekte kalan işlemi gerçekleştiriyor. Mod ve rem arasındaki fark, ince, ama önemlidir.
(-1 mod 2) normal olarak 1 değerini verir. Daha spesifik olarak iki tam sayı verildiğinde, X ve Y, işlem (X mod Y) [0, Y) aralığında bir değer döndürme eğilimindedir. Farklı şekilde söylendiği gibi, X ve Y modülü her zaman sıfıra eşit ya da büyüktür ve Y değerinden küçüktür.
Aynı işlemi "%" veya rem işleci ile gerçekleştirmek, X değerinin işaretini korur. X negatifse, aralıkta bir sonuç alırsınız (-Y, 0]. X pozitifse, sonuçta [0, Y) bir sonuç alırsınız.
Genellikle bu ince ayrım önemli değil. Yine de kod sorunuza geri dönersek, “düzgünlük” için çözmenin birçok yolu vardır.
İlk yaklaşım yeni başlayanlar için iyidir, çünkü özellikle ayrıntılıdır.
// Option 1: Clearest way for beginners
boolean isEven;
if ((a % 2) == 0)
{
isEven = true
}
else
{
isEven = false
}
İkinci yaklaşım dilden daha iyi faydalanır ve daha özlü kodlara yol açar. (== operatörünün bir boole döndürdüğünü unutmayın.)
// Option 2: Clear, succinct, code
boolean isEven = ((a % 2) == 0);
Üçüncü yaklaşım ise bütünlük için burada ve üçlü operatörünü kullanıyor. Üçlü operatör genellikle çok faydalı olsa da, bu durumda ikinci yaklaşımı üstün buluyorum.
// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;
Dördüncü ve son yaklaşım ise tam sayıların ikili gösterimi bilgisini kullanmaktır. En az anlamlı bit 0 ise o zaman sayı eşit olur. Bu, bitwise-ve operator (&) kullanılarak kontrol edilebilir. Bu yaklaşım en hızlı olmasına rağmen (bölünme yerine basit bir maskeleme yapıyorsunuz), yeni başlayanlar için belki biraz daha gelişmiş/karmaşık.
// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);
Burada bitsel ve işleci kullandım ve bunu seçenek 2'de gösterilen özlü biçimde temsil ettim. Seçenek 1'in biçiminde yeniden yazma (ve alternatif olarak Seçenek 3'ün) okuyucunun alıştırması olarak kaldı. ;)
Umarım yardımcı olur.
Java'nın% (REM) işleminin negatif X ve pozitif Y değerleri için MOD gibi çalışmasını sağlamak için bu yöntemi kullanabilirsiniz:
private int mod(int x, int y)
{
int result = x % y;
if (result < 0)
{
result += y;
}
return result;
}
veya üçlü operatör ile (bazı durumlarda daha kısa, ancak mümkün değil veya daha az verimli):
private int mod(int x, int y)
{
int result = x % y;
return result < 0? result + y : result;
}
Değerin negatif olup olmadığını kontrol ederek uygun bir modülo yapmak mümkün olsa da (çoğu kişinin önerdiği gibi) doğru ise daha kompakt bir çözüm var.
(a % b + b) % b
Bu, ilk önce, değeri -b -> + b aralığına sınırlayan, sonra da b değerini ekleyerek, sonraki modülü 0 -> b aralığına sınırlandıracak şekilde b ekleyerek, modulo yapacaktır.
Not: b negatifse, sonuç da negatif olur
Kod, modulo kullanmadan çok daha hızlı çalışır:
public boolean isEven(int a){
return ( (a & 1) == 0 );
}
public boolean isOdd(int a){
return ( (a & 1) == 1 );
}
Java'da C'nin yaptığı şekilde modulo operatörü yoktur. Java'daki%, kalan bir operatördür. Pozitif tamsayılarda tam olarak modulo gibi çalışır, ancak negatif tamsayılarda farklı şekilde çalışır ve modulo'dan farklı olarak kayan nokta sayılarıyla da çalışabilir. Yine de, pozitif tamsayılardan başka herhangi bir şeyde% kullanımı nadirdir, bu yüzden bunu bir modulo olarak adlandırmak istiyorsanız çekinmeyin!
if (a % 2 == 0) {
} else {
}
% 'kalan' operatörünü kullanmadan önce şartnameyi incelemelisiniz:
http://Java.Sun.com/docs/books/jls/third_edition/html/expressions.html#15.17.3
// bad enough implementation of isEven method, for fun. so any worse?
boolean isEven(int num)
{
num %= 10;
if(num == 1)
return false;
else if(num == 0)
return true;
else
return isEven(num + 2);
}
isEven = isEven(a);
Ayrıca, mod böyle kullanılabilir:
int a = 7;
b = a % 2;
b
1'e eşit olur. Çünkü 7 % 2 = 1
.
Java'da kalan operatör %
ve modulo operatör
public int mod(int i, int j)
{
int rem = i % j;
if (j < 0 && rem > 0)
{
return rem + j;
}
if (j > 0 && rem < 0)
{
return rem + j;
}
return rem;
}
Başka bir yol:
boolean isEven = false;
if((a % 2) == 0)
{
isEven = true;
}
Ancak en kolay yol hala:
boolean isEven = (a % 2) == 0;
@ Steve Kuo'nun dediği gibi.
Modulo operatörü% 'dir (yüzde işareti). Düzgünlüğü test etmek veya genellikle 2 değerinde bir modulo yapmak için, isEven =! (A & 1) gibi & (the ve operator) 'i de kullanabilirsiniz.
Diğerlerinin de belirttiği gibi, %
(kalan) operatörü matematiksel mod
modulus işlemi/fonksiyonu ile aynı değildir.
mod
vs%
x mod n
işlevix
-n
aralığında[0,n)
aralığında eşleştirir.x % n
operatörüx
-n
aralığında(-n,n)
aralığında.
Matematiksel modül çalışmasını kullanmak için bir yönteme sahip olmak ve x
önündeki işaretlere aldırış etmemek için aşağıdakileri kullanabilirsiniz:
((x % n) + n) % n
Belki bu resim daha iyi anlamanıza yardımcı olur (ilk olarak kafamı dolaştırırken zor zamanlar geçirdim)
Java
içinde mod işlemi şu şekilde yapılabilir:
Math.floorMod(a, b)
Not:mod işlemi kalan işleminden farklıdır. Java
içinde kalan işlemi şu şekilde yapılabilir:
a % b
Java'da %
operatörüdür: 15.17.3. Kalan Operatör%
Ayrıca, Java.lang.Math
sınıfında floorMod
seçeneğinin bulunduğunu ve bu, farklı işaretli argümanlar için %
'dan farklı bir sonuç vereceğini unutmayın: