Jawaban:
Anda dapat menggunakan operator modulus, tetapi itu bisa lambat. Jika bilangan bulat, Anda dapat melakukan:
if ( (x & 1) == 0 ) { even... } else { odd... }
Ini karena bit rendah akan selalu ditetapkan pada angka ganjil.
n % 2 == 0semantik berarti Divide by 2 and check if the remainder is 0, yang jauh lebih jelas daripada n & 1 == 0artinya Zero all the bits but leave the least significant bit unchanged and check if the result is 0. Kejelasan yang ditingkatkan dari yang pertama sebanding dengan biaya overhead (mungkin tidak ada). Itulah yang saya maksud dengan optimasi prematur. Jika ada sesuatu yang lambat dan Anda memprofilkannya di bagian itu berubah n % 2menjadi n & 1dibenarkan, tetapi melakukannya sebelumnya tidak. Secara umum bekerja dengan operator bit adalah ide yang buruk sebelum membuat profil.
n % 2 == 0adalah bersih dari n & 1 == 0.
Jika sisanya ketika Anda membagi 2 adalah 0, itu genap. %adalah operator untuk mendapatkan sisanya.
(A % B)itu sendiri dapat digunakan sebagai ekspresi, dan saat itulah segalanya menjadi menyenangkan.
Setiap angka genap dapat dibagi dua, terlepas dari apakah itu desimal (tetapi desimal, jika ada, juga harus genap). Jadi Anda dapat menggunakan %operator (modulo), yang membagi angka di sebelah kiri dengan nomor di sebelah kanan dan mengembalikan sisanya ...
boolean isEven(double num) { return ((num % 2) == 0); }
saya ingin merekomendasikan
Java Puzzlers: Traps, Pitfalls, and Corner Case Book oleh Joshua Bloch dan Neal Gafter
Ada penjelasan singkat tentang cara memeriksa apakah nomornya ganjil. Percobaan pertama adalah sesuatu yang serupa yang dicoba oleh @AseemYadav:
public static boolean isOdd(int i) {
return i % 2 == 1;
}
tetapi seperti yang disebutkan dalam buku:
ketika operasi sisanya mengembalikan hasil bukan nol, ia memiliki tanda yang sama dengan operan kirinya
jadi umumnya ketika kita memiliki angka ganjil negatif daripada sebagai ganti 1kita akan mendapatkan -1hasil i%2. Jadi kita bisa menggunakan solusi @Camilo atau hanya melakukan:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
tetapi umumnya solusi tercepat menggunakan DAN operator seperti @ lucasmo tulis di atas:
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@Edit Juga patut untuk menunjukkan Math.floorMod(int x, int y);yang berhubungan dengan negatif dividen tetapi juga dapat kembali -1jika pembagi negatif
Sedikit yang tidak signifikan (paling kanan) dapat digunakan untuk memeriksa apakah jumlahnya genap atau ganjil. Untuk semua angka ganjil, bit paling kanan selalu 1 dalam representasi biner.
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
Program berikut ini dapat menangani jumlah besar (jumlah digit lebih besar dari 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");
}
}
Ini outputnya ::
122873215981652362153862153872138721637272
Even
Anda dapat menggunakan operator modulus, tetapi itu bisa lambat. Cara yang lebih efisien adalah memeriksa bit terendah karena itu menentukan apakah angka genap atau ganjil. Kode akan terlihat seperti ini:
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"));
}
Anda bisa melakukan ini:
boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}
Ini karena Java memiliki dalam operasi modulo tanda dividen, sisi kiri: n. Jadi untuk dividen negatif dan positif, modulo memiliki tanda mereka.
Tentu saja, operasi bitwise lebih cepat dan optimal, cukup mendokumentasikan baris kode dengan dua atau tiga kata pendek, yang membuatnya mudah dibaca.
Cara mudah lain untuk melakukannya tanpa menggunakan kondisi if / else (berfungsi untuk bilangan positif dan negatif):
int n = 8;
List<String> messages = Arrays.asList("even", "odd");
System.out.println(messages.get(Math.abs(n%2)));
Untuk Aneh no., Ekspresi akan mengembalikan '1' sebagai sisa, memberi
messages.get (1) = 'aneh' dan karenanya mencetak 'aneh'
lain, 'genap' dicetak ketika ekspresi muncul dengan hasil '0'
int n = -3;. Seperti @Camilo sebutkan di bawah ini - ketika operasi sisanya mengembalikan hasil bukan nol, ia memiliki tanda yang sama dengan operan kirinya begitu umum kami memiliki System.out.println(messages.get(-1));apa yang memberi kamijava.lang.ArrayIndexOutOfBoundsException
Jika modulus bilangan yang diberikan sama dengan nol, bilangan itu bahkan bilangan ganjil. Di bawah ini adalah metode yang melakukan itu:
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);
}
}
Berikut ini contoh untuk menentukan apakah angka yang diberikan genap atau ganjil,
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");
}
}
}
Nah, ada banyak cara untuk menentukan hal yang sama. Rujuk sumber ini untuk lebih banyak contoh untuk menemukan nomor yang diberikan genap atau ganjil.
Berikut ini contoh lengkapnya: -
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);
}
}