it-swarm-tr.com

Mod için java'daki sözdizimi nedir

Sahte kodda bir örnek olarak:

if ((a mod 2) == 0)
{
    isEven = true;
}
else
{
    isEven = false;
}
212
Bob

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;
338
Cody Hatch

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.

110
martinatime

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.

88
Rob Rolnick

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;
}
31
Zom-B

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

12
Stefan T

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 );
}
11
michael

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! 

11
Greg Charles
if (a % 2 == 0) {
} else {
}
6
J D OConal

% '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);
4
kioto

Ayrıca, mod böyle kullanılabilir:

int a = 7;
b = a % 2;

b 1'e eşit olur. Çünkü 7 % 2 = 1.

3
jjnguy

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;
}
3
eljenso

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.

1
brothers28

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.

1
jjrv

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şlevi x - 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)

enter image description here

0
m4110c

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
0
Shaun Dashjian

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:

public static int floorMod​(int x, int y)

0
Roland