【发布时间】:2011-11-12 14:56:57
【问题描述】:
如何确定给定数字是偶数还是奇数?我一直想弄清楚这个问题很长时间了,但一直没有得到任何结果。
【问题讨论】:
标签: java
如何确定给定数字是偶数还是奇数?我一直想弄清楚这个问题很长时间了,但一直没有得到任何结果。
【问题讨论】:
标签: java
这是一个判断给定数字是偶数还是奇数的示例,
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");
}
}
}
嗯,有很多方法可以确定。有关更多示例,请参阅this 资源以查找给定数字是偶数还是奇数。
【讨论】:
if ((x % 2) == 0) {
// even
} else {
// 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;
}
【讨论】:
下面这个程序可以处理大数(位数大于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 void evenOrOddNumber(int number) {
if (number % 2 == 0) {
System.out.println("Number is Even");
} else {
System.out.println("Number is odd");
}
}
【讨论】:
我会推荐
Java Puzzlers: Traps, Pitfalls, and Corner Cases Book by Joshua Bloch 和尼尔·加夫特
有一个简要说明如何检查数字是否为奇数。 第一次尝试与@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;
}
@编辑
还值得指出Math.floorMod(int x, int y);,它可以很好地处理负除数,但如果除数为负,也可以返回-1
【讨论】:
最低有效位(最右边)可用于检查数字是偶数还是奇数。 对于所有奇数,二进制表示中最右边的位始终为 1。
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
【讨论】:
另一种不使用 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
这里是完整的例子:-
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);
}
}
【讨论】:
你可以这样做:
boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}
这是因为 Java 在其模运算中具有被除数的符号,左侧:n。 因此,对于负数和正数红利,模数具有它们的符号。
当然,按位运算更快更优化,只需将代码行用两三个短的单词记录下来,这样可以提高可读性。
【讨论】:
您可以使用取模运算符,但这可能会很慢。一种更有效的方法是检查最低位,因为它决定了一个数字是偶数还是奇数。代码看起来像这样:
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"));
}
【讨论】:
每个偶数都可以被 2 整除,无论它是否是小数(但小数,如果存在,也必须是偶数)。所以你可以使用%(取模)运算符,它将左边的数字除以右边的数字,然后返回余数……
boolean isEven(double num) { return ((num % 2) == 0); }
【讨论】:
余数运算符 % 将给出除以数字后的余数。
所以n % 2 == 0 在 n 为偶数时为真,在 n 为奇数时为假。
【讨论】:
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);
}
}
【讨论】:
适用于正数或负数
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);
}
}
【讨论】:
您可以使用取模运算符,但这可能会很慢。如果是整数,可以这样做:
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) 本身可以用作表达式,这就是事情变得有趣的时候。