Kun jakaminen ei onnistu täy­del­li­ses­ti, jää jäljelle jäännös. Java-modulo-ope­raat­to­ri on olemassa ottamaan tämä huomioon koo­dis­sa­si. Ope­raat­to­ri on huo­mat­ta­vas­ti luo­tet­ta­vam­pi kuin muut ratkaisut, ja sitä käytetään pää­asias­sa mää­rit­tä­mään, ovatko luvut pa­ril­li­sia vai pa­rit­to­mia.

Mikä on Java-modulo-ope­raat­to­ri?

Kaikissa yleisissä oh­jel­moin­ti­kie­lis­sä voit suorittaa pe­rus­las­ku­toi­mi­tuk­sia, kuten yh­teen­las­kua, vä­hen­nys­las­kua, ker­to­las­kua ja ja­ko­las­kua. Voit myös käyttää Java-ope­raat­to­rei­ta mo­ni­mut­kais­ten las­kel­mien näyt­tä­mi­seen ja rat­kai­se­mi­seen. Eri­tyi­ses­ti ja­ko­las­kuis­sa on aina riski, että jää jäännös. Esi­mer­kik­si, jos jaat 11 neljällä, jäännös on 3 (2 x 4 = 8, 11 - 8 = 3). Tämä voi aiheuttaa ongelmia oh­jel­moin­nis­sa.

Sitä varten on Java-modulo-ope­raat­to­ri. Se tunnetaan myös nimellä jään­nö­so­pe­raat­to­ri, koska se määrittää ja palauttaa kahden luvun jakamisen jälkeisen jään­nök­sen. On monia ti­lan­tei­ta, joissa se on erittäin tärkeä. Ope­raat­to­ria voidaan käyttää esi­mer­kik­si sel­vit­tä­mään, onko luku pa­ril­li­nen vai pariton tai onko luku alkuluku. On myös muita tapoja määrittää jäännös, mutta ne saa­vut­ta­vat nopeasti rajansa. Seuraava esimerkki ha­vain­nol­lis­taa tätä.

Mihin jään­nö­so­pe­raat­to­ria käytetään?

Yk­sin­ker­tai­ses­ti sanottuna jakaminen tar­koit­taa sen tar­kis­ta­mis­ta, kuinka monta kertaa jakaja mahtuu jaet­ta­vaan. Tuloksena on osamäärä. Jos jaettava ja jakaja on molemmat tal­len­net­tu Java-pri­mi­tii­vi­seen tie­to­tyyp­piin int (tai ko­ko­nais­lu­ku), jäännös voidaan helposti ilmaista ilman Java-moduloa. Koodi näyttäisi seu­raa­val­ta:

public class Main {
	public static void main(String[] args) {
	int dividend = 11;
	int divisor = 4;
	int remainder = dividend - (divisor * (dividend / divisor));
	System.out.println("The remainder is: " + remainder);
	}
}
java

Voimme sitten käyttää Java-komentoa System.out.println tuloksen tar­kas­te­le­mi­seen:

The remainder is: 3
java

Tämä vaih­toeh­to on hieman hankala, mutta teoriassa mah­dol­lis­ta. Ongelmia syntyy kuitenkin heti, kun vähintään yksi ope­ran­deis­ta on float- tai double-tyyppinen, eli liu­ku­lu­kui­nen tie­to­tyyp­pi. Tällöin sama las­ku­toi­mi­tus antaa eri tuloksen:

public class Main {
	public static void main(String[] args) {
	int dividend = 11;
	double divisor = 4;
	double remainder = dividend - (divisor * (dividend / divisor));
	System.out.println("The remainder is: " + remainder);
	}
}
java
The remainder is: 0.0
java

Mikä on modulo-sanan syntaksi Java-kielessä?

Java-modulo-ope­raat­to­ri puo­les­taan palauttaa aina tarkan jään­nök­sen. Se suorittaa ja­ko­las­kun, mutta näyttää vain jään­nök­sen, ei osamäärää. Se alus­te­taan pro­sent­ti­mer­kil­lä, joten sen syntaksi on seuraava:

Dividend % Divisor
java

Java-modulo näyttäisi seu­raa­val­ta, kun sitä käytetään yllä olevassa esi­mer­kis­sä:

public class Main {
	public static void main(String[] args) {
	int dividend = 11;
	double divisor = 4;
	double remainder = dividend % divisor;
	System.out.println("The remainder is: " + remainder);
	}
}
java

Tuloksena on sitten:

The remainder is: 3.0
java

Kuinka määrittää, onko luku pariton vai pa­ril­li­nen

Java-modulo-funktiota voidaan käyttää sel­vit­tä­mään, onko luku pa­ril­li­nen vai pariton. Se perustuu yk­sin­ker­tai­seen lo­giik­kaan: jos jaat minkä tahansa luvun kahdella ja jäännös on 0, luku on pa­ril­li­nen. Muussa ta­pauk­ses­sa se on pariton. Ha­vain­nol­lis­tam­me tätä if-else-lauseella.

public class Main {
	public static void main(String[] args) {
	int dividend = 11;
	if (dividend % 2 == 0) {
	System.out.println(dividend + " is an even number.");
	}
	else {
	System.out.println(dividend + " is an odd number.");
	}
	}
}
java

Kuten odotettua, saamme seuraavan tuloksen:

11 is an odd number.
java

Kuinka määrittää ne­ga­tii­vi­sen luvun jäännös

Voit myös käyttää Java-modulo-funktiota saa­dak­se­si jään­nök­sen, kun jaettava tai jakaja on ne­ga­tii­vi­nen. Tässä on yk­sin­ker­tai­nen esimerkki:

public class Main {
	public static void main(String[] args) {
	int dividend = -11;
	int divisor = 4;
	int remainder = dividend % divisor;
	System.out.println("The remainder is: " + remainder);
	}
}
java

Koska osinko on ne­ga­tii­vi­nen, myös jäljelle jäävä osa on ne­ga­tii­vi­nen:

The remainder is: -3
java

Mutta et ehkä aina halua saada ne­ga­tii­vis­ta tulosta. Jos haluat palauttaa po­si­tii­vi­sen jään­nök­sen, voit muokata koodia hieman. Tarkista ensin, onko jäännös pienempi kuin 0. Jos on, lisää jakaja ja saat po­si­tii­vi­sen jään­nök­sen. Koodi näyttää seu­raa­val­ta:

public class Main {
	public static void main(String[] args) {
	int dividend = -11;
	int divisor = 4;
	int remainder = dividend % divisor;
	System.out.println("The remainder before is: " + remainder);
	while (dividend < 0) dividend += divisor;
	int positive_remainder = dividend % divisor;
	System.out.println("The remainder after is: " + positive_remainder);
	}
}
java

Saamme seuraavan tuloksen:

The remainder before is: -3
The remainder after is: 1
java
Siirry pää­va­lik­koon