Antworten:
Sie können den Moduloperator verwenden, dies kann jedoch langsam sein. Wenn es sich um eine Ganzzahl handelt, können Sie Folgendes tun:
if ( (x & 1) == 0 ) { even... } else { odd... }
Dies liegt daran, dass das niedrige Bit immer auf eine ungerade Zahl gesetzt wird.
n % 2 == 0bedeutet semantisch Divide by 2 and check if the remainder is 0, was viel klarer ist als n & 1 == 0was bedeutet Zero all the bits but leave the least significant bit unchanged and check if the result is 0. Die verbesserte Klarheit des ersten ist den (wahrscheinlich nicht vorhandenen) Aufwand wert. Das habe ich mit vorzeitiger Optimierung gemeint. Wenn etwas langsam ist und Sie es in diesem Teil profilieren n % 2, n & 1ist es sicherlich gerechtfertigt, es zu ändern , aber es vorher nicht zu tun. Im Allgemeinen ist es eine schlechte Idee, vor dem Profiling mit den Bitoperatoren zu arbeiten.
n % 2 == 0die sauberer ist als n & 1 == 0.
Wenn der Rest, wenn Sie durch 2 teilen, 0 ist, ist es gerade. %ist der Betreiber, um einen Rest zu erhalten.
(A % B)selbst kann als Ausdruck verwendet werden, und dann wird es lustig.
Jede gerade Zahl ist durch zwei teilbar, unabhängig davon, ob es sich um eine Dezimalzahl handelt (aber die Dezimalstelle muss, falls vorhanden, auch gerade sein). Sie können also den %Operator (Modulo) verwenden, der die Zahl links durch die Zahl rechts teilt und den Rest zurückgibt ...
boolean isEven(double num) { return ((num % 2) == 0); }
ich würde empfehlen
Java Puzzlers: Fallen, Fallstricke und Eckfälle Buch von Joshua Bloch und Neal Gafter
Es gibt eine kurze Erklärung, wie Sie überprüfen können, ob die Zahl ungerade ist. Der erste Versuch ist ähnlich wie bei @AseemYadav:
public static boolean isOdd(int i) {
return i % 2 == 1;
}
aber wie im Buch erwähnt wurde:
Wenn die Restoperation ein Ergebnis ungleich Null zurückgibt, hat sie das gleiche Vorzeichen wie der linke Operand
Also im Allgemeinen, wenn wir eine negative ungerade Zahl haben, dann statt 1 wir bekommen -1als Ergebnis i%2. Wir können also die @ Camilo-Lösung verwenden oder einfach Folgendes tun:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
Aber im Allgemeinen ist die schnellste Lösung die Verwendung eines AND-Operators wie @lucasmo. Schreiben Sie oben:
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@Edit Es lohnt sich auch darauf hinzuweisen, Math.floorMod(int x, int y);welche gut mit der negativen Dividende umgehen, aber auch zurückkehren können, -1wenn der Divisor negativ ist
Funktioniert für positive oder negative Zahlen
int start = -3;
int end = 6;
for (int val = start; val < end; val++)
{
// Condition to Check Even, Not condition (!) will give Odd number
if (val % 2 == 0)
{
System.out.println("Even" + val);
}
else
{
System.out.println("Odd" + val);
}
}
Das niedrigstwertige Bit (ganz rechts) kann verwendet werden, um zu überprüfen, ob die Zahl gerade oder ungerade ist. Für alle ungeraden Zahlen ist das Bit ganz rechts in der Binärdarstellung immer 1.
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
Dieses folgende Programm kann große Zahlen verarbeiten (Anzahl der Stellen größer als 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");
}
}
Hier ist die Ausgabe ::
122873215981652362153862153872138721637272
Even
Sie können den Moduloperator verwenden, dies kann jedoch langsam sein. Ein effizienterer Weg wäre, das niedrigste Bit zu überprüfen, da dies bestimmt, ob eine Zahl gerade oder ungerade ist. Der Code würde ungefähr so aussehen:
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"));
}
Sie können dies tun:
boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}
Dies liegt daran, dass Java in seiner Modulo-Operation das Vorzeichen der Dividende auf der linken Seite hat: n. Für negative und positive Dividenden hat das Modulo das Vorzeichen von ihnen.
Natürlich ist die bitweise Operation schneller und optimiert. Dokumentieren Sie einfach die Codezeile mit zwei oder drei kurzen Wörtern, um die Lesbarkeit zu verbessern.
Ein weiterer einfacher Weg, dies ohne die if / else-Bedingung zu tun (funktioniert sowohl für positive als auch für negative Zahlen):
int n = 8;
List<String> messages = Arrays.asList("even", "odd");
System.out.println(messages.get(Math.abs(n%2)));
Für eine ungerade Nr. Gibt der Ausdruck als Rest '1' zurück und gibt
messages.get (1) = 'ungerade' und damit 'ungerade' drucken
Andernfalls wird 'gerade' gedruckt, wenn der Ausdruck das Ergebnis '0' ergibt.
int n = -3;. Wie @Camilo unten erwähnt - wenn die verbleibende Operation ein Ergebnis ungleich Null zurückgibt, hat sie das gleiche Vorzeichen wie ihr linker Operand, so allgemein, dass wir das haben, System.out.println(messages.get(-1));was uns gibtjava.lang.ArrayIndexOutOfBoundsException
Wenn der Modul der gegebenen Zahl gleich Null ist, ist die Zahl gerade oder eine ungerade Zahl. Unten ist die Methode, die das macht:
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);
}
}
Hier ist ein Beispiel, um festzustellen, ob eine bestimmte Zahl gerade oder ungerade ist.
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");
}
}
}
Nun, es gibt viele Möglichkeiten, dasselbe zu bestimmen. In dieser Ressource finden Sie weitere Beispiele, um festzustellen, ob die angegebene Zahl gerade oder ungerade ist.
Hier ist ein vollständiges Beispiel: -
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);
}
}