Risposte:
È possibile utilizzare l'operatore modulo, ma può essere lento. Se è un numero intero, puoi fare:
if ( (x & 1) == 0 ) { even... } else { odd... }
Questo perché il bit basso verrà sempre impostato su un numero dispari.
n % 2 == 0significa semanticamente Divide by 2 and check if the remainder is 0, il che è molto più chiaro di ciò n & 1 == 0che significa Zero all the bits but leave the least significant bit unchanged and check if the result is 0. La maggiore chiarezza del primo vale il sovraccarico (probabilmente inesistente). Questo è ciò che intendevo con ottimizzazione prematura. Se qualcosa è lento e si profilo it in quella parte che cambia n % 2a n & 1è certamente giustificato, ma farlo in anticipo non è. In generale, lavorare con gli operatori di bit è una cattiva idea prima della profilazione.
n % 2 == 0è più pulita di n & 1 == 0.
Se il resto quando dividi per 2 è 0, è pari. %è l'operatore per ottenere un resto.
(A % B)stesso può essere usato come espressione, ed è allora che le cose si divertono.
Ogni numero pari è divisibile per due, indipendentemente dal fatto che sia un decimale (ma anche il decimale, se presente, deve essere pari). Quindi puoi usare l' %operatore (modulo), che divide il numero a sinistra per il numero a destra e restituisce il resto ...
boolean isEven(double num) { return ((num % 2) == 0); }
io raccomanderei
Puzzle di Java: trappole, insidie e casse d'angolo di Joshua Bloch e Neal Gafter
Vi è una breve spiegazione su come verificare se il numero è dispari. Il primo tentativo è qualcosa di simile a quello che ha provato @AseemYadav:
public static boolean isOdd(int i) {
return i % 2 == 1;
}
ma come è stato menzionato nel libro:
quando l'operazione rimanente restituisce un risultato diverso da zero, ha lo stesso segno dell'operando di sinistra
quindi generalmente quando abbiamo un numero dispari negativo, allora invece di 1ottenere -1come risultato i%2. Quindi possiamo usare la soluzione @Camilo o semplicemente fare:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
ma generalmente la soluzione più veloce sta usando l'operatore AND come @lucasmo scrivi sopra:
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@Edit Vale anche la pena di indicare Math.floorMod(int x, int y);quale è il risultato positivo del dividendo, ma può anche tornare -1se il divisore è negativo
Il bit meno significativo (all'estrema destra) può essere utilizzato per verificare se il numero è pari o dispari. Per tutti i numeri dispari, il bit più a destra è sempre 1 nella rappresentazione binaria.
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
Il seguente programma può gestire numeri grandi (numero di cifre maggiore di 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");
}
}
Ecco l'output ::
122873215981652362153862153872138721637272
Even
È possibile utilizzare l'operatore modulo, ma può essere lento. Un modo più efficiente sarebbe quello di controllare il bit più basso perché questo determina se un numero è pari o dispari. Il codice sarebbe simile al seguente:
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"));
}
Puoi fare così:
boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}
Questo perché Java ha nella sua operazione modulo il segno del dividendo, il lato sinistro: n. Quindi per i dividendi negativi e positivi, il modulo ne ha il segno.
Naturalmente, l'operazione bit a bit è più veloce e ottimizzata, è sufficiente documentare la riga di codice con due o tre parole brevi, che lo fa per leggibilità.
Un altro modo semplice per farlo senza usare la condizione if / else (funziona sia per i numeri positivi che per quelli negativi):
int n = 8;
List<String> messages = Arrays.asList("even", "odd");
System.out.println(messages.get(Math.abs(n%2)));
Per un numero dispari, l'espressione restituirà '1' come resto, dando
message.get (1) = 'dispari' e quindi stampa 'dispari'
in caso contrario, viene stampato 'pari' quando l'espressione presenta il risultato '0'
int n = -3;. Come @Camilo menzionato di seguito - quando l'operazione rimanente restituisce un risultato diverso da zero, ha lo stesso segno dell'operando di sinistra in modo così generoso che abbiamo System.out.println(messages.get(-1));ciò che ci dàjava.lang.ArrayIndexOutOfBoundsException
Se il modulo di un determinato numero è uguale a zero, il numero è pari al numero dispari. Di seguito è riportato il metodo per farlo:
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);
}
}
Ecco un esempio per determinare se un determinato numero è pari o dispari,
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");
}
}
}
Bene, ci sono molti modi per determinare lo stesso. Fare riferimento a questa risorsa per ulteriori esempi per trovare il numero dato pari o dispari.
Ecco un esempio 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);
}
}