Quando uma divisão não é exata, sobra um valor de resto. Jus­ta­mente para calcular esse valor de forma precisa na sua aplicação, o operador Java modulo é dis­po­ní­bi­li­zado. Ele é con­si­de­ra­vel­mente mais confiável do que métodos al­ter­na­ti­vos, sendo usado prin­ci­pal­mente para de­ter­mi­nar se os números são pares ou ímpares.

O que é o operador Java modulo

Em todas as lin­gua­gens de pro­gra­ma­ção, você pode realizar as quatro operações arit­mé­ti­cas básicas: adição, subtração, mul­ti­pli­ca­ção e divisão, e, por exemplo, resolver problemas ma­te­má­ti­cos extensos com os ope­ra­do­res Java. No entanto, na divisão, não apenas na pro­gra­ma­ção, há o risco de não obter um resultado exato. Quando dois números inteiros são divididos, sempre existe a pos­si­bi­li­dade de que um valor de resto permaneça. Por exemplo, ao dividir 11 por 4, o resto é 3 (2 x 4 = 8, 11 - 8 = 3). Isso pode causar problemas durante a pro­gra­ma­ção.

Hos­pe­da­gem que se adapta às suas ambições
  • Fique online com 99,99% de tempo de atividade e segurança robusta
  • Aumente o de­sem­pe­nho com um clique à medida que o tráfego cresce
  • Inclui domínio gratuito, SSL, e-mail e suporte 24 horas por dia, 7 dias por semana

Portanto, o operador Java modulo é uma fer­ra­menta que determina e exibe o valor restante após a divisão de dois números. Este operador também é conhecido como operador de resto. Há várias situações em que seu uso na pro­gra­ma­ção pode ser muito im­por­tante. Por exemplo, ele pode de­ter­mi­nar se um número esperado é par ou ímpar ou se é um número primo. Embora existam outros métodos para de­ter­mi­nar o valor restante, esses podem ra­pi­da­mente encontrar suas li­mi­ta­ções. O exemplo a seguir ilustra isso.

Para que serve o operador de resto?

Na divisão, verifica-se de forma sim­pli­fi­cada quantas vezes um divisor cabe em um dividendo. O resultado é o quociente. Se o dividendo e o divisor forem ambos no tipo de dado primitivo Java int (ou Integer), você pode calcular o resto fa­cil­mente sem usar o operador Java modulo. O código cor­res­pon­dente poderia ser assim:

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

Por meio do comando Java System.out.println, você obterá a saída do valor restante após o cálculo:

O resto é: 3
java

Isso é um pouco com­pli­cado, mas fun­da­men­tal­mente possível. No entanto, torna-se pro­ble­má­tico assim que pelo menos um dos operandos for do tipo float ou double, ou seja, um tipo de dado de ponto flutuante. Nesse caso, obtemos um resultado diferente na mesma operação:

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

Sintaxe e fun­ci­o­na­li­dade do Java modulo

O operador Java modulo, por outro lado, sempre retorna o resto exato de uma divisão. Na verdade, ele também realiza a divisão, mas não exibe o resultado da divisão, apenas o resto, ou seja, a sobra final. Ele é iniciado com um símbolo de por­cen­ta­gem, então sua sintaxe é bastante simples e se parece com isto:

Dividendo % Divisor
java

Para o nosso exemplo acima, o operador Java modulo fun­ci­o­na­ria da seguinte maneira:

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

A saída é:

O resto é: 3.0
java

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

O Java modulo permite de­ter­mi­nar se um número é par ou ímpar. Para isso, utiliza-se uma lógica simples: se um dividendo qualquer é dividido por 2 e o resto é 0, o número é par. Caso contrário, o número é ímpar. Com uma instrução if-else, essa lógica pode ser ilustrada. Aqui está o código cor­res­pon­dente:

public class Main {
	public static void main(String[] args) {
	int dividendo = 11;
	if (dividendo % 2 == 0) {
	System.out.println(dividendo + " é um número par.");
	}
	else {
	System.out.println(dividendo + " é um número ímpar.");
	}
	}
}
java

Como era de se esperar, obtemos a seguinte saída:

11 é um número ímpar.
java

Resto com números negativos

Em princípio, você também pode de­ter­mi­nar o resto quando o dividendo ou o divisor são negativos. Aqui está um exemplo simples disso:

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

Como o dividendo é negativo, o resto também será sempre negativo. Portanto, a saída será:

O resto é: -3
java

No entanto, nem sempre é desejado obter um resultado negativo. Se você ajustar o código um pouco, pode obter um resto positivo. Para isso, verifique ini­ci­al­mente se o resto é menor que 0. Se for o caso, adicione o divisor para obter um resto positivo. O código para isso é o seguinte:

public class Main {
	public static void main(String[] args) {
	int dividendo = -11;
	int divisor = 4;
	int resto = dividendo % divisor;
	System.out.println("O valor do resto anterior é: " + resto);
	while (dividendo < 0) dividendo += divisor;
	int resto_positivo = dividendo % divisor;
	System.out.println("O valor do resto posterior é: " + resto_positivo);
	}
}
java

Agora obtemos esta saída:

O valor do resto anterior é: -3
O valor do resto posterior é: 1
java
Ir para o menu principal