Jak používat operátor modulo v jazyce Java
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);
}
}javaPoté můžeme použít příkaz Java System.out.println k zobrazení výsledku:
The remainder is: 3javaTato 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);
}
}javaThe remainder is: 0.0javaJaká 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 % DivisorjavaModulo 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);
}
}javaVýstup je pak následující:
The remainder is: 3.0javaJak 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.");
}
}
}javaJak jsme očekávali, dostáváme následující výsledek:
11 is an odd number.javaJak 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);
}
}javaJelikož dividenda je záporná, zbytek je také záporný:
The remainder is: -3javaAle 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);
}
}javaZískáme následující výstup:
The remainder before is: -3
The remainder after is: 1java