Answers:
您可以使用模运算符,但这可能很慢。如果是整数,则可以执行以下操作:
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难题者:陷阱,陷阱和案例案例,作者: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;
}
但通常最快的解决方案是使用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);
}
以下程序可以处理大量数字(大于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);
}
}