Respuestas:
Puede usar el operador de módulo, pero eso puede ser lento. Si es un número entero, puede hacer:
if ( (x & 1) == 0 ) { even... } else { odd... }
Esto se debe a que el bit bajo siempre se establecerá en un número impar.
n % 2 == 0significa semánticamente Divide by 2 and check if the remainder is 0, lo que es mucho más claro de lo n & 1 == 0que significa Zero all the bits but leave the least significant bit unchanged and check if the result is 0. La claridad mejorada de la primera vale la sobrecarga (probablemente no existente). Eso es lo que quise decir con optimización prematura. Si algo es lento y que el perfil it en esa parte cambiando n % 2a n & 1es, sin duda justificada, pero hacerlo de antemano que no es. En general, trabajar con los operadores de bits es una mala idea antes de crear un perfil.
n % 2 == 0está más limpia que n & 1 == 0.
Si el resto cuando divide por 2 es 0, es par. %es el operador para obtener el resto.
(A % B)en sí mismo puede usarse como una expresión, y ahí es cuando las cosas se ponen divertidas.
Cada número par es divisible por dos, independientemente de si es un decimal (pero el decimal, si está presente, también debe ser par). Entonces puede usar el %operador (módulo), que divide el número de la izquierda por el número de la derecha y devuelve el resto ...
boolean isEven(double num) { return ((num % 2) == 0); }
yo recomendaria
Java Puzzlers: Libro de trampas, trampas y casos de esquina por Joshua Bloch y Neal Gafter
Hay una breve explicación de cómo verificar si el número es impar. El primer intento es algo similar a lo que intentó @AseemYadav:
public static boolean isOdd(int i) {
return i % 2 == 1;
}
pero como se mencionó en el libro:
cuando la operación restante devuelve un resultado distinto de cero, tiene el mismo signo que su operando izquierdo
así que generalmente cuando tenemos un número impar negativo, en lugar de 1obtenerlo -1como resultado de i%2. Entonces podemos usar la solución @Camilo o simplemente hacer:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
pero generalmente la solución más rápida es usar el operador AND como @lucasmo escribe arriba:
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@Editar También vale la pena señalar Math.floorMod(int x, int y);cuál es bueno con el dividendo negativo, pero también puede regresar -1si el divisor es negativo
El bit menos significativo (más a la derecha) se puede utilizar para verificar si el número es par o impar. Para todos los números impares, el bit más a la derecha es siempre 1 en representación binaria.
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
El siguiente programa puede manejar grandes números (número de dígitos mayor que 20)
package com.isEven.java;
import java.util.Scanner;
public class isEvenValuate{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String digit = in.next();
int y = Character.getNumericValue(digit.charAt(digit.length()-1));
boolean isEven = (y&1)==0;
if(isEven)
System.out.println("Even");
else
System.out.println("Odd");
}
}
Aquí está la salida ::
122873215981652362153862153872138721637272
Even
Puede usar el operador de módulo, pero eso puede ser lento. Una forma más eficiente sería verificar el bit más bajo porque eso determina si un número es par o impar. El código se vería así:
public static void main(String[] args) {
System.out.println("Enter a number to check if it is even or odd");
System.out.println("Your number is " + (((new Scanner(System.in).nextInt() & 1) == 0) ? "even" : "odd"));
}
Puedes hacer así:
boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}
Esto se debe a que Java tiene en su módulo de operación el signo del dividendo, el lado izquierdo: n. Entonces, para dividendos negativos y positivos, el módulo tiene el signo de ellos.
Por supuesto, la operación bit a bit es más rápida y optimizada, simplemente documente la línea de código con dos o tres palabras cortas, lo que lo hace para facilitar la lectura.
Otra forma fácil de hacerlo sin usar la condición if / else (funciona tanto para números positivos como negativos):
int n = 8;
List<String> messages = Arrays.asList("even", "odd");
System.out.println(messages.get(Math.abs(n%2)));
Para un número impar, la expresión devolverá '1' como resto, dando
messages.get (1) = 'impar' y, por lo tanto, imprime 'impar'
de lo contrario, 'even' se imprime cuando la expresión aparece con el resultado '0'
int n = -3;. Como @Camilo menciona a continuación: cuando la operación restante devuelve un resultado distinto de cero, tiene el mismo signo que su operando izquierdo, tan generosamente tenemos System.out.println(messages.get(-1));lo que nos dajava.lang.ArrayIndexOutOfBoundsException
Si el módulo del número dado es igual a cero, el número es incluso un número impar. A continuación se muestra el método que hace eso:
public void evenOrOddNumber(int number) {
if (number % 2 == 0) {
System.out.println("Number is Even");
} else {
System.out.println("Number is odd");
}
}
package isevenodd;
import java.util.Scanner;
public class IsEvenOdd {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter number: ");
int y = scan.nextInt();
boolean isEven = (y % 2 == 0) ? true : false;
String x = (isEven) ? "even" : "odd";
System.out.println("Your number is " + x);
}
}
Aquí hay un ejemplo para determinar si un número dado es par o impar,
import java.util.Scanner;
public class EvenOdd
{
public static void main(String[] args)
{
int a;
System.out.println("Please enter a number to check even or odd:");
Scanner sc = new Scanner(System.in);
a = sc.nextInt();
if(a % 2 == 0)
{
System.out.println("Entered number is an even number");
}
else
{
System.out.println("Entered number is an odd number");
}
}
}
Bueno, hay muchas formas de determinar lo mismo. Consulte este recurso para obtener más ejemplos para encontrar que el número dado es par o impar.
Aquí hay un ejemplo completo: -
import java.text.ParseException;
public class TestOddEvenExample {
public static void main(String args[]) throws ParseException {
int x = 24;
oddEvenChecker(x);
int xx = 3;
oddEvenChecker(xx);
}
static void oddEvenChecker(int x) {
if (x % 2 == 0)
System.out.println("You entered an even number." + x);
else
System.out.println("You entered an odd number." + x);
}
}