Operator Modulo di Java

1. Ikhtisar

Dalam tutorial singkat ini, kami akan menunjukkan apa itu operator modulo, dan bagaimana kami dapat menggunakannya dengan Java untuk beberapa kasus penggunaan umum.

2. Penyelenggara Modulo

Mari kita mulai dengan kekurangan pembagian sederhana di Jawa.

Jika operan di kedua sisi operator divisi memiliki tipe int , hasil operasinya adalah int lainnya :

@Test public void whenIntegerDivision_thenLosesRemainder() { assertThat(11 / 4).isEqualTo(2); }

Pembagian yang sama memberi kita hasil yang berbeda ketika setidaknya salah satu operan memiliki tipe float atau double:

@Test public void whenDoubleDivision_thenKeepsRemainder() { assertThat(11 / 4.0).isEqualTo(2.75); }

Kita dapat mengamati bahwa kita kehilangan sisa operasi pembagian saat membagi bilangan bulat.

Operator modulo memberi kita sisa ini dengan tepat:

@Test public void whenModulo_thenReturnsRemainder() { assertThat(11 % 4).isEqualTo(3); }

Sisanya adalah yang tersisa setelah membagi 11 (pembilang) dengan 4 (pembagi) - dalam hal ini, 3.

Karena alasan yang sama pembagian dengan nol tidak dimungkinkan, tidak mungkin menggunakan operator modulo ketika argumen sisi kanan adalah nol.

Pembagian dan operasi modulo melontarkan ArithmeticException saat kita mencoba menggunakan nol sebagai operan sisi kanan:

@Test(expected = ArithmeticException.class) public void whenDivisionByZero_thenArithmeticException() { double result = 1 / 0; } @Test(expected = ArithmeticException.class) public void whenModuloByZero_thenArithmeticException() { double result = 1 % 0; }

3. Kasus Penggunaan Umum

Kasus penggunaan yang paling umum untuk operator modulo adalah untuk mengetahui apakah suatu bilangan ganjil atau genap.

Jika hasil operasi modulo antara bilangan apa pun dan dua sama dengan satu, itu adalah bilangan ganjil:

@Test public void whenDivisorIsOddAndModulusIs2_thenResultIs1() { assertThat(3 % 2).isEqualTo(1); }

Di sisi lain, jika hasilnya nol (yaitu tidak ada sisa), itu adalah bilangan genap:

@Test public void whenDivisorIsEvenAndModulusIs2_thenResultIs0() { assertThat(4 % 2).isEqualTo(0); }

Penggunaan lain yang baik dari operasi modulo adalah untuk melacak indeks tempat kosong berikutnya dalam larik melingkar.

Dalam implementasi sederhana antrian melingkar untuk nilai int , elemen disimpan dalam larik ukuran tetap.

Setiap kali kami ingin mendorong elemen ke antrian melingkar kami, kami hanya menghitung posisi bebas berikutnya dengan menghitung modulo dari jumlah item yang telah kami masukkan plus 1 dan kapasitas antrian:

@Test public void whenItemsIsAddedToCircularQueue_thenNoArrayIndexOutOfBounds() { int QUEUE_CAPACITY= 10; int[] circularQueue = new int[QUEUE_CAPACITY]; int itemsInserted = 0; for (int value = 0; value < 1000; value++) { int writeIndex = ++itemsInserted % QUEUE_CAPACITY; circularQueue[writeIndex] = value; } }

Dengan menggunakan operator modulo, kami mencegah writeIndex keluar dari batas array, oleh karena itu, kami tidak akan pernah mendapatkan ArrayIndexOutOfBoundsException .

Namun, setelah kami memasukkan lebih dari QUEUE_CAPACITY item, item berikutnya akan menimpa item pertama.

4. Kesimpulan

Operator modulo digunakan untuk menghitung sisa dari pembagian integer yang jika tidak hilang.

Sangat berguna untuk melakukan hal-hal sederhana seperti mencari tahu apakah suatu bilangan genap atau ganjil, serta tugas yang lebih kompleks seperti melacak posisi penulisan berikutnya dalam larik melingkar.

Kode contoh tersedia di repositori GitHub.