답변:
모듈러스 연산자를 사용할 수 있지만 속도가 느릴 수 있습니다. 정수인 경우 다음을 수행 할 수 있습니다.
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. 첫 번째의 향상된 선명도는 (아마도 존재하지 않는) 오버 헤드 가치가 있습니다. 그것이 바로 조기 최적화의 의미입니다. 뭔가 느리고 당신이 변화하는 부분에 프로필 경우 n % 2에 n & 1확실히 정당화하지만, 사전에 그 일을하지 않습니다. 일반적으로 비트 연산자로 작업하는 것은 프로파일 링 전에 나쁜 생각입니다.
n % 2 == 0입니다 청소기 보다 n & 1 == 0.
2로 나눌 때 나머지가 0이면 짝수입니다. %나머지를 얻는 연산자입니다.
(A % B)그 자체가 표현으로 사용될 수 있으며, 그 때 일이 재미있어집니다.
나는 추천 할 것이다
Java Puzzlers : Joshua Bloch와 Neal Gafter의 함정, 함정 및 코너 케이스
숫자가 홀수인지 확인하는 방법에 대한 간단한 설명이 있습니다. 첫 번째 시도는 @AseemYadav가 시도한 것과 비슷한 것입니다.
public static boolean isOdd(int i) {
return i % 2 == 1;
}
그러나 책에서 언급했듯이 :
나머지 연산이 0이 아닌 결과를 반환하면 왼쪽 피연산자와 동일한 부호를 갖습니다.
일반적으로 음수가 홀수 인 경우 대신에 결과를 1얻습니다 . 따라서 @Camilo 솔루션을 사용하거나 다음을 수행 할 수 있습니다.-1i%2
public static boolean isOdd(int i) {
return i % 2 != 0;
}
그러나 일반적으로 가장 빠른 솔루션은 위의 @lucasmo write와 같은 AND 연산자를 사용하는 것입니다.
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@Edit 그것은 또한 Math.floorMod(int x, int y);배당금을 마이너스로 다루는 것이 좋으나 -1제수가 마이너스이면 돌아올 수도 있음 을 지적 할 가치가 있습니다.
최하위 비트 (가장 오른쪽)를 사용하여 숫자가 짝수인지 홀수인지 확인할 수 있습니다. 모든 홀수 숫자의 경우 맨 오른쪽 비트는 항상 이진 표현에서 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가 아래에 언급했듯이-나머지 연산이 0이 아닌 결과를 반환하면 왼쪽 피연산자와 같은 부호를 가지므로 일반적으로 우리 System.out.println(messages.get(-1));에게 제공하는 것java.lang.ArrayIndexOutOfBoundsException
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);
}
}