Si una división no es exacta, queda un valor residual. Para ca­l­cu­lar­lo co­rre­c­ta­me­n­te en tu programa, Java dispone del operador módulo. Es mucho más fiable que las so­lu­cio­nes al­te­r­na­ti­vas y se utiliza pri­n­ci­pa­l­me­n­te para de­te­r­mi­nar si los números son pares o impares.

El Modulo Operator en Java

En todos los lenguajes de pro­gra­ma­ción se pueden realizar las cuatro ope­ra­cio­nes ari­t­mé­ti­cas básicas de suma, resta, mu­l­ti­pli­ca­ción y división y, por ejemplo, utilizar los ope­ra­do­res Java para vi­sua­li­zar y resolver incluso problemas ari­t­mé­ti­cos extensos. Sin embargo, no solo en el ámbito de la pro­gra­ma­ción existe el riesgo de que no haya resultado entero. Cuando divides dos números enteros, siempre existe la po­si­bi­li­dad de que quede un residuo. Por ejemplo, al dividir 11 entre 4, queda un residuo de 3 (2 x 4 = 8, 11 - 8 = 3). Esto puede provocar problemas al programar.

Hosting
Hosting de primera al mejor precio
  • 3x más rápido, ahora un 60 % de ahorro
  • Alta di­s­po­ni­bi­li­dad >99.99 %
  • Solo en IONOS: hasta 500 GB incluidos

Para ello existe una he­rra­mie­n­ta en Java, el operador módulo, el cual determina y devuelve el valor residual después de dividir dos números. Existen varias si­tua­cio­nes en las que su uso puede ser muy im­po­r­ta­n­te en pro­gra­ma­ción. Por ejemplo, puede de­te­r­mi­nar si un número es par o impar o si es un número primo. Aunque existen otras formas de calcular este residuo, estas a veces pueden alcanzar rá­pi­da­me­n­te sus límites, como ilustra el ejemplo que pre­se­n­ta­mos.

¿Para qué se utiliza el operador módulo?

En términos sencillos, la división consiste en comprobar cuántas veces cabe un divisor en un dividendo. El resultado es el cociente. Si tanto el dividendo como el divisor están al­ma­ce­na­dos en un tipo de dato primitivo de Java int (o Integer), también puedes calcular el residuo sin problemas sin usar el operador módulo de Java. El código sería el siguiente:

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

El comando Java System.out.println da este resultado:

El resto es: 3
java

Aunque esto es algo co­m­pli­ca­do, en principio es posible. Sin embargo, se vuelve pro­ble­má­ti­co en cuanto al menos uno de los operandos es de tipo float o double, es decir, un tipo de datos de coma flotante. En este caso obtenemos un resultado diferente para el mismo 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

Sintaxis y fu­n­cio­na­li­dad del operador módulo de Java

En cambio, el operador módulo de Java siempre muestra el resto exacto. Aunque también realiza la división, no muestra el resultado, sino solo el resto que queda. Se inicia con un signo de po­r­ce­n­ta­je, por lo que su sintaxis tendrá esta es­tru­c­tu­ra:

Dividend % Divisor
java

Para nuestro ejemplo anterior, el operador módulo de Java fu­n­cio­na­ría así:

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

El resultado sería:

El resto es: 3.0
java

De­te­r­mi­nar si los números son pares o impares

El operador módulo de Java permite averiguar si un número es par o impar. Para ello se utiliza una lógica simple: si se divide cualquier dividendo entre 2 y el resto es 0, el número es par. En caso contrario, el número es impar. Esta su­po­si­ción se puede ilustrar con una sentencia if-else. Este sería el código para ello:

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 esperar, recibimos este resultado:

11 es un número impar.
java

Resto con números negativos

En principio, también se puede de­te­r­mi­nar el resto si el dividendo o el divisor son negativos. Este es un ejemplo sencillo:

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 el dividendo es negativo, el resto también será negativo. El resultado es:

El resto es: -3
java

Sin embargo, no siempre es deseable obtener un resultado negativo. Por lo tanto, si se adapta un poco el código, se puede obtener un resto positivo. Para ello, comprueba primero si el resto es menor que 0. Si es así, añade el divisor para obtener un resto positivo. El código sería el siguiente:

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

Ob­te­n­dre­mos este resultado:

El resto antes del cambio es: -3 
El resto después del cambio es: 1
java
Ir al menú principal