检查数字是偶数还是奇数

如何确定一个给定的数字是偶数还是奇数?我一直想弄明白这个问题,但是一直没有结果。

521657 次浏览

如果除以2的余数为0,则为偶数。 %是得到余数的操作符。

每个偶数都可以被2整除,不管它是否是小数(但是小数,如果存在,也必须是偶数)。因此,您可以使用 %(模)运算符,它将左边的数字除以右边的数字,然后返回余数..。

boolean isEven(double num) { return ((num % 2) == 0); }

余数运算符% 将在除以一个数后给出余数。

所以如果 n 是偶数 n % 2 == 0为真,如果 n 是奇数 n % 2 == 0为假。

if ((x % 2) == 0) {
// even
} else {
// odd
}

你可以使用模运算符,但是速度会很慢。如果它是一个整数,你可以这样做:

if ( (x & 1) == 0 ) { even... } else { odd... }

这是因为低位总是设置在奇数上。

适用于正数或负数

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);
}
}
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);
}
}

另一种不使用 if/else 条件的简单方法(对正数和负数都适用) :

int n = 8;
List<String> messages = Arrays.asList("even", "odd");


System.out.println(messages.get(Math.abs(n%2)));

对于奇数编号,表达式将返回’1’作为余数,给定

Get (1) = ‘ odd’,因此打印‘ odd’

否则,当表达式得到结果“0”时,将打印“ 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"));
}

下面的程序可以处理大数字(大于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

你可以这样做:

boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}

这是因为 Java 的模除中有红利的符号,左边是 n。 所以对于负数和正数的红利,模具有它们的符号。

当然,位操作速度更快,也更优化,只需用两三个简短的单词记录代码行,这样就可以提高可读性。

下面是一个完整的例子:-

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);
}
}

enter image description here

我建议

Java 智力游戏: 陷阱,陷阱,和角落案例书作者: Joshua Bloch 还有 Neal Gafter

有一个简短的解释如何检查数字是奇数。 第一次尝试与@AsemYadav 的尝试类似:

public static boolean isOdd(int i) {
return i % 2 == 1;
}

但正如书中提到的:

当余数运算返回非零结果时,它具有相同的 作为其左操作数的符号

所以一般来说,当我们有负的奇数时,我们会得到 -1作为 i%2的结果,而不是 1。因此,我们可以使用@Camilo 解决方案,或者直接这样做:

public static boolean isOdd(int i) {
return i % 2 != 0;
}

但通常最快的解决方案是使用 AND 操作符,如@lucasmo:

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);
}

如果给定数的模等于零,则该数为偶数或奇数。下面是这样做的方法:

public void evenOrOddNumber(int number) {
if (number % 2 == 0) {
System.out.println("Number is Even");
} else {
System.out.println("Number is odd");
}
}
    /**
* Check if a number is even or not using modulus operator.
*
* @param number the number to be checked.
* @return {@code true} if the given number is even, otherwise {@code false}.
*/
public static boolean isEven(int number) {
return number % 2 == 0;
}


/**
* Check if a number is even or not using & operator.
*
* @param number the number to be checked.
* @return {@code true} if the given number is even, otherwise {@code false}.
*/
public static boolean isEvenFaster(int number) {
return (number & 1) == 0;
}

来源