Quando due numeri non sono di­vi­si­bi­li fra loro, di­vi­den­do­li si ottiene un resto. In Java, questa ope­ra­zio­ne viene ef­fet­tua­ta dall’operatore modulo, che rap­pre­sen­ta una soluzione molto più af­fi­da­bi­le rispetto alle al­ter­na­ti­ve e viene uti­liz­za­to prin­ci­pal­men­te per de­ter­mi­na­re se i numeri sono pari o dispari.

L’operatore modulo di Java

Tutti i più comuni linguaggi di pro­gram­ma­zio­ne con­sen­to­no di eseguire le quattro ope­ra­zio­ni arit­me­ti­che di base: addizione, sot­tra­zio­ne, mol­ti­pli­ca­zio­ne e divisione. È inoltre possibile, ad esempio, uti­liz­za­re gli appositi operatori Java per vi­sua­liz­za­re e risolvere problemi arit­me­ti­ci anche di ampia portata. Nell’ambito della pro­gram­ma­zio­ne, però, sono in par­ti­co­la­re le divisioni a cui bisogna prestare at­ten­zio­ne. Infatti, dividendo due numeri interi, c’è il rischio di non ottenere come risultato un numero intero. Ad esempio, dividendo 11 per 4 si ottiene un resto di 3 (2 x 4 = 8, 11 - 8 = 3). Questo può creare dei problemi durante la pro­gram­ma­zio­ne.

Web Hosting
Diventa il n°1 della rete con il provider di hosting n°1 in Europa
  • Di­spo­ni­bi­li­tà garantita al 99,99%
  • Dominio, SSL ed e-mail inclusi
  • As­si­sten­za 24/7 in lingua italiana

In Java esiste uno strumento, l’operatore modulo, che determina e re­sti­tui­sce il resto dopo aver diviso due numeri. È anche co­no­sciu­to in inglese come “remainder operator” (“operatore del resto”). Ci sono diverse si­tua­zio­ni in cui il suo utilizzo può tornare molto utile nella pro­gram­ma­zio­ne. Ad esempio, l’operatore modulo è in grado di de­ter­mi­na­re se un numero sarà pari o dispari, o se si tratta di un numero primo. Esistono anche altri modi per de­ter­mi­na­re il resto di una divisione, ma si tratta di strumenti de­ci­sa­men­te più limitati. Te lo di­mo­stria­mo con il seguente esempio.

A cosa serve l’operatore modulo?

In poche parole, una divisione si ha quando un divisore si inserisce in un dividendo. Il risultato è il quoziente. Se il dividendo e il divisore sono entrambi me­mo­riz­za­ti nel tipo di dato primitivo int (o Integer), puoi fa­cil­men­te calcolare il resto senza ricorrere all’operatore modulo in Java. Il codice cor­ri­spon­den­te dovrebbe so­mi­glia­re a questo:

public class Main {
	public static void main(String[] args) {
	int dividendo = 11;
	int divisore = 4;
	int resto = dividendo - (divisore * (dividendo / divisore));
	System.out.println("Il resto è: " + resto);
	}
}
java

Il comando Java System.out.println fornisce questo risultato:

Il resto è: 3
java

Questa soluzione, sebbene un po’ mac­chi­no­sa, in linea di principio è efficace. Tuttavia, la procedura diventa pro­ble­ma­ti­ca non appena almeno uno degli operandi è di tipo float o double, cioè un tipo di dati in virgola mobile. In questo caso, per lo stesso calcolo si ottiene un risultato diverso:

public class Main {
	public static void main(String[] args) {
	int dividendo = 11;
	double divisore = 4;
	double resto = dividendo - (divisore * (dividendo / divisore));
	System.out.println("Il resto è: " + resto);
	}
}
java
Il resto è: 0,0
java

Sintassi e fun­zio­na­li­tà dell’operatore modulo di Java

L’operatore modulo di Java, invece, produce sempre il resto esatto. Pur eseguendo la divisione, non ne mostra il risultato, ma solo il resto che rimane alla fine. L’operatore viene indicato con il segno di per­cen­tua­le %. La sua sintassi è la seguente:

Dividendo % Divisore
java

Nel caso del nostro esempio, il­lu­stra­to qui sopra, l’operatore modulo di Java funziona in questo modo:

public class Main {
	public static void main(String[] args) {
	int dividendo = 11;
	double divisore = 4;
	double resto = dividendo % divisore;
	System.out.println("Il resto è: " + resto);
	}
}
java

L’output è:

Il resto è: 3.0
java

De­ter­mi­na­re se i numeri sono pari o dispari

L’operatore modulo di Java permette di de­ter­mi­na­re se un numero è pari o dispari. Questo avviene secondo una logica piuttosto semplice: se si divide un qualsiasi dividendo per 2 e il resto è 0, il risultato è pari. In caso contrario, è per forza dispari. Questa ipotesi può essere il­lu­stra­ta at­tra­ver­so un’istru­zio­ne if-else. Questo è il codice cor­ri­spon­den­te:

public class Main {
	public static void main(String[] args) {
	int dividendo = 11;
	if (dividendo % 2 == 0) {
	System.out.println("Bei " + dividendo + " è un numero pari.");
	}
	else {
	System.out.println("Il " + dividendo + " è un numero dispari.");
	}
}
java

Come previsto, otteniamo il seguente risultato:

11 è un numero dispari.
java

Resto con numeri negativi

In linea di principio, è ov­via­men­te possibile de­ter­mi­na­re il resto anche se il dividendo o il divisore è negativo. Di seguito un semplice esempio:

public class Main {
	public static void main(String[] args) {
	int dividendo = -11;
	int divisore = 4;
	int resto = dividendo % divisore;
	System.out.println("Il resto è: " + resto);
	}
}
java

Poiché il dividendo è negativo, anche il resto sarà sempre negativo. Il risultato è:

Il resto è: -3
java

In ogni caso, non sempre si desidera ottenere un risultato negativo. Per questo motivo, adattando un po’ il codice, è possibile ottenere un resto positivo. Per farlo, è ne­ces­sa­rio con­trol­la­re in­nan­zi­tut­to che il resto sia inferiore a 0. In caso af­fer­ma­ti­vo, si aggiunge il divisore per ottenere un resto positivo. Il codice per ottenere questo risultato è il seguente:

public class Main {
	public static void main(String[] args) {
	int dividendo = -11;
	int divisore = 4;
	int resto = dividendo % divisore;
	System.out.println("Il resto della prima modifica è: " + resto);
	while (dividendo < 0) dividendo += divisore;
	int resto_positivo = dividendo % divisore;
	System.out.println("Il resto dopo la modifica è: " + resto_positivo);
	}
}
java

L’output sarà il seguente:

Il resto prima della modifica è: -3
Il resto dopo la modifica è: 1
java
Vai al menu prin­ci­pa­le