ฉันจะทราบได้อย่างไรว่าตัวเลขที่กำหนดเป็นเลขคู่หรือคี่ ฉันอยากจะคิดเรื่องนี้มานานแล้วและไม่ได้ไปไหนเลย
ฉันจะทราบได้อย่างไรว่าตัวเลขที่กำหนดเป็นเลขคู่หรือคี่ ฉันอยากจะคิดเรื่องนี้มานานแล้วและไม่ได้ไปไหนเลย
คำตอบ:
คุณสามารถใช้ตัวดำเนินการโมดูลัส แต่อาจช้า หากเป็นจำนวนเต็มคุณสามารถทำสิ่งต่อไปนี้
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กว่า
if((x%2)==0)
// even
else
// odd
หากส่วนที่เหลือเมื่อคุณหารด้วย 2 เป็น 0 มันจะเท่ากับ %เป็นผู้ประกอบการที่จะได้รับส่วนที่เหลือ
(A % B)ตัวเองสามารถใช้เป็นนิพจน์และนั่นคือเมื่อสิ่งที่สนุก
ตัวดำเนินการส่วนที่เหลือ% จะให้ส่วนที่เหลือหลังจากหารด้วยตัวเลข
ดังนั้นn % 2 == 0จะเป็นจริงถ้า n เป็นเลขคู่และเท็จถ้า n เป็นเลขคี่
ทุกเลขคู่จะหารด้วยสองโดยไม่คำนึงว่าจะเป็นทศนิยมหรือไม่ (แต่ถ้าเป็นทศนิยมจะต้องเป็นเลขคู่ด้วย) ดังนั้นคุณสามารถใช้%โอเปอเรเตอร์ (modulo) ซึ่งจะหารตัวเลขทางซ้ายด้วยตัวเลขทางด้านขวาและส่งกลับค่าเศษที่เหลือ ...
boolean isEven(double num) { return ((num % 2) == 0); }
ฉันจะแนะนำ
Java Puzzlers: Traps, Pitfalls และ Corner Cases Book โดย Joshua Bloch และ Neal Gafter
มีคำอธิบายสั้น ๆ ว่าจะตรวจสอบว่าเป็นเลขคี่หรือไม่ ลองครั้งแรกเป็นสิ่งที่คล้ายกับสิ่งที่ @AseemYadav พยายาม:
public static boolean isOdd(int i) {
return i % 2 == 1;
}
แต่ดังที่ถูกกล่าวถึงในหนังสือ:
เมื่อการดำเนินการที่เหลือส่งกลับผลลัพธ์ที่ไม่ใช่ศูนย์จะมีเครื่องหมายเช่นเดียวกับตัวถูกดำเนินการด้านซ้าย
ดังนั้นโดยทั่วไปเมื่อเรามีเลขคี่เชิงลบจากนั้นแทน1เราจะได้รับเป็นผลมาจาก-1 i%2ดังนั้นเราสามารถใช้ @Camilo solution หรือเพียงแค่ทำ:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
แต่โดยทั่วไปวิธีแก้ปัญหาที่เร็วที่สุดคือการใช้ตัวดำเนินการ AND เช่น @lucasmo เขียนด้านบน:
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@ แก้ไขมันก็คุ้มที่จะชี้ให้เห็นMath.floorMod(int x, int y);ว่าดีกับการจ่ายเงินปันผลติดลบ แต่ยังสามารถคืนได้-1หากตัวหารเป็นลบ
ใช้งานได้กับจำนวนบวกหรือลบ
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);
}
}
บิตที่สำคัญน้อยที่สุด (ขวาสุด) สามารถใช้เพื่อตรวจสอบว่าตัวเลขเป็นเลขคู่หรือคี่ สำหรับตัวเลขที่แปลกทั้งหมดบิตขวาสุดจะเป็น 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"));
}
คุณสามารถทำสิ่งนี้:
boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}
นี่เป็นเพราะ Java มีการดำเนินการโมดูโลสัญลักษณ์การจ่ายเงินปันผลทางด้านซ้าย: n ดังนั้นสำหรับเงินปันผลเชิงลบและบวกโมดูโลมีสัญลักษณ์ของพวกเขา
แน่นอนว่าการดำเนินการระดับบิตนั้นเร็วขึ้นและได้รับการปรับให้เหมาะสมที่สุดเพียงแค่บันทึกบรรทัดโค้ดด้วยคำสั้น ๆ สองหรือสามคำซึ่งช่วยให้อ่านได้ง่าย
อีกวิธีที่ง่ายในการทำโดยไม่ใช้เงื่อนไข 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) = 'คี่' และด้วยเหตุนี้การพิมพ์ 'คี่'
อื่น ๆ 'คู่' จะถูกพิมพ์เมื่อนิพจน์เกิดขึ้นพร้อมกับผลลัพธ์ '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);
}
}