Как мне определить, четное или нечетное число? Я давно хотел разобраться в этом и ничего не добился.
Как мне определить, четное или нечетное число? Я давно хотел разобраться в этом и ничего не добился.
Ответы:
Вы можете использовать оператор модуля, но это может быть медленным. Если это целое число, вы можете:
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)сам по себе может использоваться как выражение, и тогда все становится весело.
Каждое четное число делится на два, независимо от того, является ли оно десятичным (но десятичное число, если оно присутствует, также должно быть четным). Таким образом, вы можете использовать %оператор (по модулю), который делит число слева на число справа и возвращает остаток ...
boolean isEven(double num) { return ((num % 2) == 0); }
я бы порекомендовал
Книга Джошуа Блоха и Нила Гафтера "Пазлы Java: ловушки, подводные камни и угловые случаи"
Вот краткое объяснение того, как проверить, нечетное ли число. Первая попытка похожа на то, что пытался @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;
}
но обычно самым быстрым решением является использование оператора И, например @lucasmo, написанного выше:
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@Edit Также стоит указать, 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) = '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);
}
}