# Operador módulo en Java: funcionalidad y ventajas

Si una división no es exacta, queda un valor residual. Para calcularlo correctamente en tu programa, Java dispone del operador módulo. Es mucho más fiable que las soluciones alternativas y se utiliza principalmente para determinar si los números son pares o impares.

## El Modulo Operator en Java

En todos los [lenguajes de programación](https://www.ionos.mx/digitalguide/paginas-web/desarrollo-web/lenguajes-de-programacion-web/) se pueden realizar las cuatro operaciones aritméticas básicas de suma, resta, multiplicación y división y, por ejemplo, utilizar los [operadores Java](https://www.ionos.mx/digitalguide/paginas-web/desarrollo-web/operadores-java/) para visualizar y resolver incluso problemas aritméticos extensos. Sin embargo, no solo en el ámbito de la programación existe el riesgo de que **no haya resultado entero**. Cuando divides dos números enteros, siempre existe la posibilidad 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.

Para ello existe una herramienta en Java, el operador módulo, el cual determina y devuelve el **valor residual después de dividir dos números**. Existen varias situaciones en las que su uso puede ser muy importante en programación. Por ejemplo, puede determinar 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ápidamente sus límites, como ilustra el ejemplo que presentamos.

## ¿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 almacenados en un [tipo de dato primitivo de Java](https://www.ionos.mx/digitalguide/paginas-web/desarrollo-web/primitivos-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:

```java
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); 
} 
}
```

El [comando Java](https://www.ionos.mx/digitalguide/paginas-web/desarrollo-web/comandos-java/) `System.out.println` da este resultado:

```java
El resto es: 3
```

Aunque esto es algo complicado, en principio es posible. Sin embargo, se vuelve problemático 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:

```java
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
```

## Sintaxis y funcionalidad 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 porcentaje, por lo que su sintaxis tendrá esta estructura:

```java
Dividend % Divisor
```

Para nuestro ejemplo anterior, el operador módulo de Java funcionaría así:

```java
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); 
} 
}
```

El resultado sería:

```java
El resto es: 3.0
```

## Determinar 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 suposición se puede ilustrar con una sentencia **if-else**. Este sería el código para ello:

```java
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."); 
} 
}
```

Como era de esperar, recibimos este resultado:

```java
11 es un número impar.
```

## Resto con números negativos

En principio, también se puede determinar el resto si el dividendo o el divisor son negativos. Este es un ejemplo sencillo:

```java
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); 
} 
}
```

Como el dividendo es negativo, el resto también será negativo. El resultado es:

```java
El resto es: -3
```

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:

```java
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); 
} 
}
```

Obtendremos este resultado:

```java
El resto antes del cambio es: -3 
El resto después del cambio es: 1
```


This is a markdown version of: [https://www.ionos.mx/digitalguide/paginas-web/desarrollo-web/operador-modulo-en-java/](https://www.ionos.mx/digitalguide/paginas-web/desarrollo-web/operador-modulo-en-java/) for AI/LLM consumption.