Når division ikke fungerer perfekt, får du en rest. Java-modulo-ope­ra­to­ren er der for at tage højde for dette i din kode. Ope­ra­to­ren er be­ty­de­ligt mere pålidelig end andre løsninger og bruges primært til at bestemme, om tal er lige eller ulige.

Hvad er Java-modulo-ope­ra­to­ren?

I alle al­min­de­li­ge pro­gram­me­rings­sprog kan du udføre de grund­læg­gen­de arit­me­ti­ske ope­ra­tio­ner addition, sub­trak­tion, mul­ti­pli­ka­tion og division. Du kan også bruge Java-ope­ra­to­rer til at vise og løse komplekse be­reg­nin­ger. Når det gælder division, er der altid risiko for, at der er en rest. Hvis du for eksempel dividerer 11 med 4, får du en rest på 3 (2 x 4 = 8, 11 - 8 = 3). Dette kan føre til problemer i pro­gram­me­rin­gen.

Det er det, Java-modulo-ope­ra­to­ren er til for. Den kaldes også re­sto­pe­ra­to­ren, da den bestemmer og re­tur­ne­rer resten, når to tal divideres. Der er for­skel­li­ge si­tu­a­tio­ner, hvor den er ekstremt vigtig. Ope­ra­to­ren kan f.eks. bruges til at finde ud af, om et tal er lige eller ulige, eller om et tal er et primtal. Der findes også andre måder at bestemme resten på, men de når hurtigt deres grænser. Det følgende eksempel il­lu­stre­rer dette.

Hvad bruges re­sto­pe­ra­tø­ren til?

Enkelt sagt indebærer division at kon­trol­le­re, hvor mange gange en divider passer ind i et dividende. Re­sul­ta­tet er kvo­tien­ten. Hvis dividende og divider begge er gemt i den primitive Java-datatype int (eller heltal), kan resten let udtrykkes uden Java modulo. Koden vil se således ud:

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

Vi kan derefter bruge Java-kom­man­do­en System.out.println til at se re­sul­ta­tet:

The remainder is: 3
java

Denne mulighed er lidt besværlig, men er i teorien mulig. Vi vil dog støde på problemer, så snart mindst én af ope­ran­der­ne er en float eller double, det vil sige en flydende tal-datatype. I dette tilfælde vil den samme beregning give os et andet resultat:

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

Hvad er syntaksen for modulo i Java?

Java-modulo-ope­ra­to­ren re­tur­ne­rer derimod altid den nøjagtige rest. Den udfører division, men viser kun resten, ikke kvo­tien­ten. Den ini­ti­a­li­se­res med et pro­cent­tegn, hvilket betyder, at dens syntaks ser således ud:

Dividend % Divisor
java

Java modulo ville se således ud, når det bruges i oven­stå­en­de eksempel:

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

Re­sul­ta­tet er derefter:

The remainder is: 3.0
java

Hvordan man afgør, om et tal er ulige eller lige

Java modulo kan bruges til at finde ud af, om et tal er lige eller ulige. Det følger af simpel logik: Hvis du deler et tal med 2 og resten er 0, er det lige. Ellers er det ulige. Vi il­lu­stre­rer dette med en if-else-sætning.

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

Som forventet får vi følgende resultat:

11 is an odd number.
java

Sådan bestemmes resten af et negativt tal

Du kan også bruge Java modulo til at få resten, når di­vi­den­den eller divisoren er negativ. Her er et simpelt eksempel:

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

Da udbyttet er negativt, er re­st­be­lø­bet også negativt:

The remainder is: -3
java

Men du ønsker måske ikke altid at få et negativt resultat. Hvis du vil returnere en positiv rest, kan du ændre koden lidt. Kon­trol­ler først, om resten er mindre end 0. Hvis det er tilfældet, skal du tilføje divisoren, og så får du den positive rest. Sådan ser koden ud:

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

Vi får følgende output:

The remainder before is: -3
The remainder after is: 1
java
Gå til ho­ved­me­nu­en