回答:
モジュラス演算子を使用できますが、遅くなる可能性があります。整数の場合、次のことができます。
if ( (x & 1) == 0 ) { even... } else { odd... }
これは、下位ビットが常に奇数に設定されるためです。
n % 2 == 0
意味的手段をDivide by 2 and check if the remainder is 0
より明確よりである、n & 1 == 0
手段Zero all the bits but leave the least significant bit unchanged and check if the result is 0
。1つ目の改善された明快さは、(おそらく存在しない)オーバーヘッドの価値があります。それは私が時期尚早な最適化で意味したものです。何かが遅く、その部分をプロファイルする場合、変更するn % 2
ことn & 1
は確かに正当化されますが、事前に行うことは正当化されません。一般に、ビット演算子を使用することは、プロファイリングの前に悪い考えです。
n % 2 == 0
ですクリーナーよりn & 1 == 0
。
2で除算したときの余りが0であれば、それは偶数です。%
剰余を取得する演算子です。
(A % B)
それ自体を表現として使うことができ、それが物事が楽しくなるときです。
小数かどうかに関係なく、すべての偶数は2で割り切れます(ただし、小数がある場合は、それも偶数でなければなりません)。したがって、%
(モジュロ)演算子を使用できます。この演算子は、左側の数値を右側の数値で割り、剰余を返します...
boolean isEven(double num) { return ((num % 2) == 0); }
私がお勧めします
Javaパズル:トラップ、落とし穴、コーナーケースブックJoshua BlochとNeal Gafter
数が奇数かどうかを確認する方法の簡単な説明があります。最初の試行は、@ AseemYadavが試行したものと似ています。
public static boolean isOdd(int i) {
return i % 2 == 1;
}
しかし、本で述べられたように:
剰余演算がゼロ以外の結果を返す場合、左のオペランドと同じ符号を持ちます
したがって、一般に負の奇数の場合は、の結果として1
得-1
られますi%2
。したがって、@ Camiloソリューションを使用するか、単に次のようにします。
public static boolean isOdd(int i) {
return i % 2 != 0;
}
しかし、一般的に最速の解決策は、上記の@lucasmoのようにAND演算子を使用することです。
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@Edit Math.floorMod(int x, int y);
マイナスの配当をうまく処理-1
するが、除数がマイナスの場合にも戻ることができることを指摘することも価値があります
最下位ビット(右端)を使用して、数値が偶数か奇数かを確認できます。すべての奇数の場合、右端のビットは常に2進数表現で1です。
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
次のプログラムは、大きな数(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");
}
}
ここに出力があります::
122873215981652362153862153872138721637272
Even
モジュラス演算子を使用できますが、遅くなる可能性があります。より効率的な方法は、数値が偶数か奇数かを決定するため、最下位ビットをチェックすることです。コードは次のようになります。
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"));
}
if / else条件を使用せずにこれを行う別の簡単な方法(正と負の両方の数値で機能):
int n = 8;
List<String> messages = Arrays.asList("even", "odd");
System.out.println(messages.get(Math.abs(n%2)));
奇数の場合、式は剰余として「1」を返し、
messages.get(1)= 'odd'、したがって 'odd'を出力する
それ以外の場合、式が結果「0」になると「偶数」が出力されます
int n = -3;
。@Camiloが以下に言及するように-剰余演算がゼロ以外の結果を返すとき、それは左のオペランドと同じ符号を持ってSystem.out.println(messages.get(-1));
いるので、寛大に私たちに与えるものがありますjava.lang.ArrayIndexOutOfBoundsException
与えられた数の係数がゼロに等しい場合、その数は奇数です。以下はそれを行うメソッドです:
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);
}
}
以下は、与えられた数が偶数か奇数かを判別する例です。
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");
}
}
}
まあ、同じことを決定する多くの方法があります。与えられた数が偶数か奇数かを見つけるためのより多くの例については、このリソースを参照してください。
ここに完全な例があります:-
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);
}
}