Câu trả lời:
Bạn có thể sử dụng toán tử mô đun, nhưng điều đó có thể chậm. Nếu đó là một số nguyên, bạn có thể làm:
if ( (x & 1) == 0 ) { even... } else { odd... }
Điều này là do bit thấp sẽ luôn được đặt trên một số lẻ.
n % 2 == 0có nghĩa là về mặt ngữ nghĩa Divide by 2 and check if the remainder is 0, rõ ràng hơn nhiều so với n & 1 == 0nghĩa là gì Zero all the bits but leave the least significant bit unchanged and check if the result is 0. Sự rõ ràng được cải thiện của lần đầu tiên có giá trị (có lẽ không tồn tại). Đó là những gì tôi có nghĩa là tối ưu hóa sớm. Nếu một cái gì đó chậm và bạn cấu hình nó trong phần đó thay đổi n % 2thành n & 1chắc chắn là hợp lý, nhưng làm nó trước thì không. Nói chung làm việc với các toán tử bit là một ý tưởng tồi trước khi định hình.
n % 2 == 0là sạch hơn n & 1 == 0.
Nếu phần còn lại khi bạn chia cho 2 là 0, thì đó là số chẵn. %là nhà điều hành để có được một phần còn lại.
(A % B)chính nó có thể được sử dụng như một biểu thức, và đó là khi mọi thứ trở nên vui vẻ.
Mỗi số chẵn chia hết cho hai, bất kể đó là số thập phân (nhưng số thập phân, nếu có, cũng phải là số chẵn). Vì vậy, bạn có thể sử dụng %toán tử (modulo), chia số bên trái cho số bên phải và trả về phần còn lại ...
boolean isEven(double num) { return ((num % 2) == 0); }
Tôi muốn giới thiệu
Java Puzzlers: Bẫy, cạm bẫy và các vụ án góc của Joshua Bloch và Neal Gafter
Có một lời giải thích ngắn gọn làm thế nào để kiểm tra nếu số là số lẻ. Lần thử đầu tiên là thứ tương tự như những gì @AseemYadav đã thử:
public static boolean isOdd(int i) {
return i % 2 == 1;
}
nhưng như đã được đề cập trong cuốn sách:
khi hoạt động còn lại trả về kết quả khác 0, nó có cùng dấu với toán hạng bên trái của nó
Vì vậy, nói chung khi chúng ta có số lẻ âm thay vì 1chúng ta sẽ nhận được -1kết quả là i%2. Vì vậy, chúng ta có thể sử dụng giải pháp @Camilo hoặc chỉ cần làm:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
nhưng nói chung, giải pháp nhanh nhất là sử dụng toán tử AND như @lucasmo viết ở trên:
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@ Chỉnh sửa Cũng đáng để chỉ ra Math.floorMod(int x, int y);rằng điều này có lợi cho việc chia cổ tức âm nhưng cũng có thể trả lại -1nếu số chia là âm
Ít nhất có thể sử dụng bit (ngoài cùng bên phải) để kiểm tra xem số chẵn hay lẻ. Đối với tất cả các số lẻ, bit ngoài cùng bên phải luôn là 1 trong biểu diễn nhị phân.
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
Chương trình sau đây có thể xử lý số lượng lớn (số chữ số lớn hơn 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");
}
}
Đây là đầu ra ::
122873215981652362153862153872138721637272
Even
Bạn có thể sử dụng toán tử mô đun, nhưng điều đó có thể chậm. Một cách hiệu quả hơn sẽ là kiểm tra bit thấp nhất bởi vì điều đó xác định xem một số chẵn hay lẻ. Mã sẽ trông giống như thế này:
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"));
}
Bạn có thể làm như thế này:
boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}
Điều này là do Java có hoạt động modulo của nó, dấu hiệu của cổ tức, bên trái: n. Vì vậy, đối với cổ tức tiêu cực và tích cực, modulo có dấu hiệu của chúng.
Tất nhiên, hoạt động bitwise nhanh hơn và được tối ưu hóa, chỉ cần ghi lại dòng mã bằng hai hoặc ba từ ngắn, để làm cho nó dễ đọc.
Một cách dễ dàng khác để làm điều đó mà không cần sử dụng điều kiện if / other (hoạt động cho cả số dương và số âm):
int n = 8;
List<String> messages = Arrays.asList("even", "odd");
System.out.println(messages.get(Math.abs(n%2)));
Đối với số lẻ, biểu thức sẽ trả về '1' như phần còn lại, cho
tin nhắn.get (1) = 'lẻ' và do đó in 'lẻ'
khác, 'chẵn' được in khi biểu thức xuất hiện với kết quả '0'
int n = -3;. Như @Camilo đã đề cập dưới đây - khi hoạt động còn lại trả về kết quả khác không, nó có cùng dấu hiệu với toán hạng bên trái của nó, vì vậy chúng tôi có System.out.println(messages.get(-1));những gì mang lại cho chúng tôijava.lang.ArrayIndexOutOfBoundsException
Nếu mô đun của số đã cho bằng 0, số đó là số lẻ khác. Dưới đây là phương pháp thực hiện điều đó:
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);
}
}
Đây là một ví dụ để xác định xem một số đã cho là chẵn hay lẻ,
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");
}
}
}
Vâng, có nhiều cách để xác định giống nhau. Tham khảo tài nguyên này để biết thêm ví dụ để tìm số đã cho là chẵn hoặc lẻ.
Dưới đây là ví dụ đầy đủ: -
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);
}
}