Když dělení nefunguje dokonale, zůstane vám zbytek. Operátor modulo v Javě slouží k zohlednění tohoto jevu ve vašem kódu. Tento operátor je podstatně spolehlivější než jiná řešení a používá se především k určení, zda jsou čísla sudá nebo lichá.

Co je to operátor modulo v jazyce Java?

Ve všech běžných programovacích jazycích můžete provádět základní aritmetické operace sčítání, odčítání, násobení a dělení. K zobrazení a řešení složitých výpočtů můžete také použít operátory jazyka Java. Zejména u dělení vždy existuje riziko, že vznikne zbytek. Například při dělení 11 číslem 4 vznikne zbytek 3 (2 x 4 = 8, 11 - 8 = 3). To může vést k problémům při programování.

K tomu slouží operátor modulo v jazyce Java. Je také známý jako operátor zbytku, protože určuje a vrací zbytek po dělení dvou čísel. Existuje řada situací, ve kterých je velmi důležitý. Operátor lze použít například k zjištění, zda je číslo sudé nebo liché, nebo zda je číslo prvočíslo. Existují sice i jiné způsoby, jak určit zbytek, ale ty rychle narážejí na své limity. Následující příklad to ilustruje.

K čemu se používá operátor zbytku?

Zjednodušeně řečeno, dělení spočívá v ověření, kolikrát se dělitel vejde do dělence. Výsledkem je podíl. Pokud jsou dělence i dělitel uloženy v primitivním datovém typu Java int (neboli celé číslo), lze zbytek snadno vyjádřit bez modulu Java. Kód by vypadal následovně:

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

Poté můžeme použít příkaz Java System.out.println k zobrazení výsledku:

The remainder is: 3
java

Tato možnost je poněkud nepraktická, ale teoreticky je možná. Problémy však nastanou, jakmile je alespoň jeden z operandů typu float nebo double, tedy datového typu s plovoucí desetinnou čárkou. V takovém případě nám stejný výpočet dá jiný výsledek:

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

Jaká je syntaxe modulu v Javě?

Naopak operátor modulo v jazyce Java vždy vrátí přesný zbytek. Provádí dělení, ale zobrazuje pouze zbytek, nikoli podíl. Inicializuje se znakem procenta, což znamená, že jeho syntaxe vypadá následovně:

Dividend % Divisor
java

Modulo v Javě by v výše uvedeném příkladu vypadalo následovně:

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

Výstup je pak následující:

The remainder is: 3.0
java

Jak určit, zda je číslo sudé nebo liché

Modulo v Javě lze použít k zjištění, zda je číslo sudé nebo liché. Vychází to z jednoduché logiky: pokud jakékoli číslo vydělíte 2 a zbytek je 0, je sudé. V opačném případě je liché. Ilustrujeme to pomocí příkazu if-else.

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

Jak jsme očekávali, dostáváme následující výsledek:

11 is an odd number.
java

Jak určit zbytek záporného čísla

Java modulo můžete také použít k získání zbytku, když je dělitel nebo dělitel záporný. Zde je jednoduchý příklad:

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

Jelikož dividenda je záporná, zbytek je také záporný:

The remainder is: -3
java

Ale možná nechcete vždy dostat záporný výsledek. Pokud chcete vrátit kladný zbytek, můžete kód trochu upravit. Nejprve zkontrolujte, zda je zbytek menší než 0. Pokud ano, přidejte dělitel a dostanete kladný zbytek. Takto bude kód vypadat:

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

Získáme následující výstup:

The remainder before is: -3
The remainder after is: 1
java
Přejít do hlavního menu