Respostas:
Você pode usar o operador de módulo, mas isso pode ser lento. Se for um número inteiro, você pode fazer:
if ( (x & 1) == 0 ) { even... } else { odd... }
Isso ocorre porque o bit baixo será sempre definido em um número ímpar.
n % 2 == 0significa semanticamente Divide by 2 and check if the remainder is 0, o que é muito mais claro do n & 1 == 0que isso significa Zero all the bits but leave the least significant bit unchanged and check if the result is 0. A clareza aprimorada do primeiro vale a sobrecarga (provavelmente inexistente). Isso foi o que eu quis dizer com otimização prematura. Se algo é lento e você o perfila nessa parte, mudar n % 2para n & 1certamente é justificado, mas fazê-lo antecipadamente não é. Em geral, trabalhar com os operadores de bit é uma má ideia antes de criar um perfil.
n % 2 == 0é mais limpa do que n & 1 == 0.
Se o restante quando você divide por 2 for 0, é par. %é o operador para obter um restante.
(A % B)ela mesma pode ser usada como expressão, e é aí que as coisas ficam divertidas.
Todo número par é divisível por dois, independentemente de ser um decimal (mas o decimal, se presente, também deve ser par). Então você pode usar o% operador (módulo), que divide o número à esquerda pelo número à direita e retorna o restante ...
boolean isEven(double num) { return ((num % 2) == 0); }
eu recomendaria
Java Puzzlers: Armadilhas, Armadilhas e Caixas de Canto Livro de Joshua Bloch e Neal Gafter
Há uma breve explicação de como verificar se o número é ímpar. A primeira tentativa é algo semelhante ao que o @AseemYadav tentou:
public static boolean isOdd(int i) {
return i % 2 == 1;
}
mas como foi mencionado no livro:
quando a operação restante retorna um resultado diferente de zero, ela tem o mesmo sinal que seu operando esquerdo
geralmente quando temos um número ímpar negativo, em vez de 1obter -1o resultado i%2. Para que possamos usar a solução @Camilo ou simplesmente:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
mas geralmente a solução mais rápida é usar o operador AND como o @lucasmo write acima:
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@Edit Também vale a pena apontar Math.floorMod(int x, int y);que lida bem com o dividendo negativo, mas também pode retornar -1se o divisor for negativo
O bit menos significativo (mais à direita) pode ser usado para verificar se o número é par ou ímpar. Para todos os números ímpares, o bit mais à direita é sempre 1 na representação binária.
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
O programa a seguir pode lidar com números grandes (número de dígitos maior 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");
}
}
Aqui está a saída ::
122873215981652362153862153872138721637272
Even
Você pode usar o operador de módulo, mas isso pode ser lento. Uma maneira mais eficiente seria verificar o bit mais baixo, porque isso determina se um número é par ou ímpar. O código ficaria assim:
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"));
}
Você pode fazer assim:
boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}
Isso ocorre porque o Java possui em seu módulo de operação o sinal do dividendo, no lado esquerdo: n. Portanto, para dividendos negativos e positivos, o módulo tem o sinal deles.
Obviamente, a operação bit a bit é mais rápida e otimizada, basta documentar a linha de código com duas ou três palavras curtas, o que facilita a leitura.
Outra maneira fácil de fazer isso sem usar a condição if / else (funciona para números positivos e negativos):
int n = 8;
List<String> messages = Arrays.asList("even", "odd");
System.out.println(messages.get(Math.abs(n%2)));
Para um número ímpar, a expressão retornará '1' como restante, fornecendo
messages.get (1) = 'ímpar' e, portanto, imprimindo 'ímpar'
caso contrário, 'even' será impresso quando a expressão aparecer com o resultado '0'
int n = -3;. Como @Camilo mencionados abaixo - quando a operação restante retornar um resultado diferente de zero, ele tem o mesmo sinal como seu operando esquerdo para generelly temos System.out.println(messages.get(-1));que nos dájava.lang.ArrayIndexOutOfBoundsException
Se o módulo do número fornecido for igual a zero, o número será ainda mais ímpar. Abaixo está o método que faz isso:
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);
}
}
Aqui está um exemplo para determinar se um determinado número é par ou ímpar,
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");
}
}
}
Bem, existem muitas maneiras de determinar o mesmo. Consulte este recurso para obter mais exemplos para descobrir que o número fornecido é par ou ímpar.
Aqui está um exemplo 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);
}
}