Se uma divisão não for exata, fica um valor residual. Para calculá-lo cor­re­ta­mente no seu programa, Java dispõe do operador módulo. É muito mais fiável do que as soluções al­ter­na­ti­vas e é usado prin­ci­pal­mente para de­ter­mi­nar se os números são pares ou ímpares.

O Módulo Operator em Java

Em todas as lin­gua­gens de pro­gra­ma­ção, é possível realizar as quatro operações arit­mé­ti­cas básicas de adição, subtração, mul­ti­pli­ca­ção e divisão e, por exemplo, utilizar os ope­ra­do­res Java para vi­su­a­li­zar e resolver até mesmo problemas arit­mé­ti­cos extensos. No entanto, não é apenas no âmbito da pro­gra­ma­ção que existe o risco de não haver um resultado inteiro. Quando divide dois números inteiros, existe sempre a pos­si­bi­li­dade de sobrar um resto. Por exemplo, ao dividir 11 por 4, sobra um resto de 3 (2 x 4 = 8, 11 - 8 = 3). Isso pode causar problemas na pro­gra­ma­ção.

Para isso, existe uma fer­ra­menta em Java, o operador módulo, que determina e retorna o valor residual após dividir dois números. Existem várias situações em que o seu uso pode ser muito im­por­tante na pro­gra­ma­ção. Por exemplo, pode de­ter­mi­nar se um número é par ou ímpar ou se é um número primo. Embora existam outras formas de calcular esse resíduo, elas às vezes podem atingir ra­pi­da­mente os seus limites, como ilustra o exemplo que apre­sen­ta­mos.

Para que serve o operador módulo?

Em termos simples, a divisão consiste em verificar quantas vezes um divisor cabe num dividendo. O resultado é o quociente. Se tanto o dividendo quanto o divisor estiverem ar­ma­ze­na­dos num tipo de dados primitivo Java int (ou Integer), também é possível calcular o resíduo sem problemas, sem usar o operador módulo Java. O código seria o seguinte:

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

O comando Java System.out.println dá este resultado:

El resto es: 3
java

Embora isso seja um pouco com­pli­cado, em princípio é possível. No entanto, torna-se pro­ble­má­tico quando pelo menos um dos operandos é do tipo float ou double, ou seja, um tipo de dados de vírgula flutuante. Neste caso, obtemos um resultado diferente para o mesmo cálculo:

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

Sintaxe e fun­ci­o­na­li­dade do operador módulo Java

Por outro lado, o operador módulo do Java sempre mostra o resto exato. Embora também realize a divisão, ele não mostra o resultado, mas apenas o resto que sobra. Ele começa com um sinal de por­cen­ta­gem, portanto sua sintaxe terá esta estrutura:

Dividend % Divisor
java

Para o nosso exemplo anterior, o operador módulo do Java fun­ci­o­na­ria assim:

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

O resultado seria:

El resto es: 3.0
java

De­ter­mi­nar se os números são pares ou ímpares

O operador módulo do Java permite descobrir se um número é par ou ímpar. Para isso, utiliza-se uma lógica simples: se qualquer dividendo for dividido por 2 e o resto for 0, o número é par. Caso contrário, o número é ímpar. Essa suposição pode ser ilustrada com uma instrução if-else. Este seria o código para isso:

public class Main { 
public static void main(String[] args) { 
int dividend = 11; 
if (dividend % 2 == 0) { 
System.out.println("El " + dividend + " es un número par."); 
} 
else { 
System.out.println("El " + dividend + " es un número impar."); 
} 
}
java

Como era de se esperar, obtivemos este resultado:

11 es un número impar.
java

Resto com números negativos

Em princípio, também é possível de­ter­mi­nar o resto se o dividendo ou o divisor forem negativos. Este é um exemplo simples:

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

Como o dividendo é negativo, o resto também será negativo. O resultado é:

El resto es: -3
java

No entanto, nem sempre é desejável obter um resultado negativo. Portanto, se o código for li­gei­ra­mente adaptado, é possível obter um resto positivo. Para isso, verifique primeiro se o resto é menor que 0. Se for, adicione o divisor para obter um resto positivo. O código seria o seguinte:

public class Main { 
public static void main(String[] args) { 
int dividend = -11; 
int divisor = 4; 
int resto = dividend % divisor; 
System.out.println("El resto antes del cambio es: " + resto); 
while (dividend < 0) dividend += divisor; 
int resto_positivo = dividend % divisor; 
System.out.println("El resto después del cambio es: " + resto_positivo); 
} 
}
java

Obtemos este resultado:

El resto antes del cambio es: -3 
El resto después del cambio es: 1
java
Ir para o menu principal