Відповіді:
Можна використовувати оператор модуля, але це може бути повільним. Якщо це ціле число, ви можете:
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;
}
але в цілому найшвидшим рішенням є використання оператора 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"));
}
Ви можете зробити так:
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) = 'непарний' і, отже, друк 'непарний'
інше, "even" друкується, коли вираз з’являється з результатом "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);
}
}