resto - mod en java netbeans
¿Cuál es la sintaxis de mod en java? (15)
Como ejemplo en pseudocódigo:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
Además, mod se puede utilizar de esta manera:
int a = 7;
b = a % 2;
b
sería igual a 1. Porque 7 % 2 = 1
.
Aquí está la representación de su pseudocódigo en un código de Java mínimo;
boolean isEven = a % 2 == 0;
Ahora lo desglosaré 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 de doble igual (==) se usa para comparar valores, como un par de entradas y devuelve un valor booleano. Esto 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 la operación de resto. La diferencia entre mod y rem es sutil, pero importante.
(-1 mod 2) normalmente daría 1. Más específicamente dados dos enteros, X e Y, la operación (X mod Y) tiende a devolver un valor en el rango [0, Y). Dicho de otra manera, el módulo de X e Y es siempre mayor o igual a cero, y menor que Y.
Realizar la misma operación con el operador "%" o rem mantiene el signo del valor X. Si X es negativo, se obtiene un resultado en el rango (-Y, 0]. Si X es positivo, se obtiene un resultado en el rango [0, Y).
A menudo, esta distinción sutil 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 breve. (No olvide que el operador == devuelve un valor booleano).
// Option 2: Clear, succinct, code
boolean isEven = ((a % 2) == 0);
El tercer enfoque está aquí para completar, y utiliza el operador ternary . Aunque el operador ternario suele ser 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 es utilizar el conocimiento de la representación binaria de enteros . Si el bit menos significativo es 0, entonces el número es par. Esto se puede verificar usando bitwise y el operador (&). Si bien este enfoque es el más rápido (estás haciendo un simple enmascaramiento de bits en lugar de división), quizás sea un poco avanzado / complicado para un principiante.
// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);
Aquí utilicé bitwise y el operador, y lo representé en la forma sucinta que se muestra en la opción 2. Reescribiéndolo en la forma de la Opción 1 (y, alternativamente, la Opción 3) se deja como ejercicio para el lector. ;)
Espero que ayude.
El código se ejecuta mucho más rápido sin usar módulo:
public boolean isEven(int a){
return ( (a & 1) == 0 );
}
public boolean isOdd(int a){
return ( (a & 1) == 1 );
}
El operador de módulo es% (signo de porcentaje). Para probar la uniformidad o generalmente hacer un módulo para una potencia de 2, también puede usar & (el operador y) como isEven =! (A & 1).
El operador restante en Java es %
y el operador de módulo se puede expresar como
public int mod(int i, int j)
{
int rem = i % j;
if (j < 0 && rem > 0)
{
return rem + j;
}
if (j > 0 && rem < 0)
{
return rem + j;
}
return rem;
}
En Java es el operador %
: 15.17.3. Operador del resto%
Tenga en cuenta que también hay floorMod
en la clase java.lang.Math
que dará un resultado diferente de %
para argumentos con diferentes signos:
Java en realidad no tiene operador de módulo como lo hace C % en Java es un operador de resto. En enteros positivos, funciona exactamente como módulo, pero funciona de manera diferente en enteros negativos y, a diferencia de módulo, puede trabajar con números de punto flotante también. Aún así, es raro usar% en cualquier cosa que no sean enteros positivos, así que si quieres llamarlo módulo, ¡siéntete libre!
Otra forma es:
boolean isEven = false;
if((a % 2) == 0)
{
isEven = true;
}
Pero aún así la forma más fácil es:
boolean isEven = (a % 2) == 0;
Como dijo @Steve Kuo.
Para enteros no negativos, puede utilizar el operador de resto %
. 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;
Para hacer que la operación% (REM) de Java funcione como MOD para valores negativos de X y positivos de Y, puede usar este método:
private int mod(int x, int y)
{
int result = x % y;
if (result < 0)
{
result += y;
}
return result;
}
o con el operador ternario (más corto, pero no posible o menos eficiente en algunas situaciones):
private int mod(int x, int y)
{
int result = x % y;
return result < 0? result + y : result;
}
Si bien es posible realizar un módulo adecuado verificando si el valor es negativo y corregirlo si lo es (como muchos han sugerido), existe una solución más compacta.
(a % b + b) % b
Primero hará el módulo, limitando el valor al rango -b -> + b y luego agregará b para asegurar que el valor sea positivo, dejando que el siguiente módulo lo limite al rango 0 -> b.
Nota: Si b es negativo, el resultado también será negativo.
Una alternativa al código de @Cody:
Usando el operador de módulo:
bool isEven = (a % 2) == 0;
Creo que este es un código ligeramente mejor que escribir si / else, porque hay menos duplicación y flexibilidad no utilizada. Requiere un poco más de capacidad cerebral para examinar, pero la buena denominación de isEven
compensa.
debe examinar la especificación antes de usar el operador ''resto'':
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.17.3
// bad enough implementation of isEven method, for fun. so any worse?
boolean isEven(int num)
{
num %= 10;
if(num == 1)
return false;
else if(num == 0)
return true;
else
return isEven(num + 2);
}
isEven = isEven(a);
if (a % 2 == 0) {
} else {
}