Te sugerimos que pruebes esta resolución en un entorno controlado antes de enviarlo a producción, un saludo.
Solución:
En lugar del operador de módulo, que tiene una semántica ligeramente diferente, para enteros no negativos, puede usar el recordatorio operador %
. Para su ejemplo exacto:
if ((a % 2) == 0)
isEven = true;
else
isEven = false;
Esto se puede simplificar a una sola línea:
isEven = (a % 2) == 0;
Aquí está la representación de su pseudocódigo en código Java mínimo;
boolean isEven = a % 2 == 0;
Ahora lo dividiré en sus componentes. El operador de módulo en Java es el carácter de porcentaje (%). Por lo tanto, tomar un int% int devuelve otro int. El operador doble igual (==) se usa para comparar valores, como un par de ints y devuelve un booleano. Esto luego se asigna a la variable booleana ‘isEven’. Según la precedencia del operador, el módulo se evaluará antes de la comparación.
Como todos los demás ya dieron la respuesta, agregaré un poco de contexto adicional. % el operador de “módulo” está realizando el resto de la operación. La diferencia entre mod y rem es sutil, pero importante.
(-1 mod 2) normalmente daría 1. Más específicamente dados dos números enteros, X e Y, la operación (X mod Y) tiende a devolver un valor en el rango [0, Y). Said differently, the modulus of X and Y is always greater than or equal to zero, and less than Y.
Performing the same operation with the “%” or rem operator maintains the sign of the X value. If X is negative you get a result in the range (-Y, 0]. Si X es positivo, obtiene un resultado en el rango[0Y)[0Y)
A menudo, esta sutil distinción no importa. Sin embargo, volviendo a la pregunta del código, hay varias formas de resolver la “uniformidad”.
El primer enfoque es bueno para los principiantes, porque es especialmente detallado.
// Option 1: Clearest way for beginners
boolean isEven;
if ((a % 2) == 0)
isEven = true
else
isEven = false
El segundo enfoque aprovecha mejor el lenguaje y conduce a un código más sucinto. (No olvide que el operador == devuelve un booleano).
// Option 2: Clear, succinct, code
boolean isEven = ((a % 2) == 0);
El tercer enfoque está aquí para completar y utiliza el operador ternario. Aunque el operador ternario es a menudo muy útil, en este caso considero que el segundo enfoque es superior.
// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;
El cuarto y último enfoque consiste en utilizar el conocimiento de la representación binaria de números enteros. Si el bit menos significativo es 0, el número es par. Esto se puede verificar usando el operador and bit a bit (&). Si bien este enfoque es el más rápido (está haciendo un enmascaramiento de bits simple en lugar de una división), quizás sea un poco avanzado / complicado para un principiante.
// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);
Aquí utilicé el operador and bit a bit, y lo representé en la forma sucinta que se muestra en la opción 2. Reescribirlo en la forma de la Opción 1 (y alternativamente en la Opción 3) se deja como ejercicio para el lector. 😉
Espero que ayude.
Reseñas y calificaciones del post
Recuerda que puedes difundir este ensayo si te ayudó.