Какой синтаксис для мода в java

В качестве примера в псевдокоде:

if ((a mod 2) == 0)
{
    isEven = true;
}
else
{
    isEven = false;
}

Ответ 1

Для неотрицательных целых чисел вы можете использовать оператор остатка %. Для вашего точного примера:

if ((a % 2) == 0)
{
    isEven = true;
}
else
{
    isEven = false;
}

Это можно упростить для однострочного интерфейса:

isEven = (a % 2) == 0;

Ответ 2

Вот представление вашего псевдокода в минимальном Java-коде;

boolean isEven = a % 2 == 0;

Теперь я разбиваю его на свои компоненты. Оператор модуля в Java является символом процента (%). Следовательно, взятие int% int возвращает другой int. Оператор double equals (==) используется для сравнения значений, таких как пара int и возвращает логическое значение. Затем он присваивается логической переменной "isEven". Основываясь на приоритете оператора, модуль будет оцениваться перед сравнением.

Ответ 3

Поскольку все остальные уже дали ответ, я добавлю дополнительный контекст. % оператор "модуль" фактически выполняет операцию останова. Разница между mod и rem является тонкой, но важной.

(- 1 mod 2) обычно дает 1. Более конкретно, учитывая два целых числа: X и Y, операция (X mod Y) стремится вернуть значение в диапазоне [0, Y). Говоря иначе, модуль X и Y всегда больше или равен нулю и меньше Y.

Выполнение той же операции с оператором "%" или "rem" поддерживает знак значения X. Если X отрицательно, вы получаете результат в диапазоне (-Y, 0). Если X положителен, вы получаете результат в диапазоне [0, Y).

Часто это тонкое различие не имеет значения. Возвращаясь к вашему кодовому вопросу, существует множество способов решения "равномерности".

Первый подход хорош для новичков, потому что он особенно многословный.

// Option 1: Clearest way for beginners
boolean isEven;
if ((a % 2) == 0)
{
  isEven = true
}
else
{
  isEven = false
}

Второй подход лучше использует язык и приводит к более сжатому коду. (Не забывайте, что оператор == возвращает логическое значение.)

// Option 2: Clear, succinct, code
boolean isEven = ((a % 2) == 0);

Третий подход здесь для полноты и использует оператор trernary. Хотя тернарный оператор часто очень полезен, в этом случае я считаю, что второй подход превосходит.

// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;

Четвертый и последний подход заключается в использовании знаний двоичного представления целых чисел. Если младший значащий бит равен 0, то число четное. Это можно проверить с помощью побитового и оператора (&). Хотя этот подход является самым быстрым (вы делаете простую битовую маскировку вместо деления), это, возможно, немного продвинуто/сложно для новичков.

// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);

Здесь я использовал побитовый и оператор и представлял его в сжатой форме, показанной в варианте 2. Перезаписывая его в форме Option 1 (и, альтернативно, вариант 3), остается в качестве упражнения для читателя.;)

Надеюсь, что это поможет.

Ответ 4

Чтобы заставить Java% (REM) работать как MOD для отрицательных значений X и положительных Y, вы можете использовать этот метод:

private int mod(int x, int y)
{
    int result = x % y;
    if (result < 0)
    {
        result += y;
    }
    return result;
}

или с тернарным оператором (короче, но не возможно или менее эффективно в некоторых ситуациях):

private int mod(int x, int y)
{
    int result = x % y;
    return result < 0? result + y : result;
}

Ответ 5

В то время как возможно сделать правильный модуль, проверив, является ли это значение отрицательным, и исправьте его, если это так (многие предложили), существует более компактное решение.

(a % b + b) % b

Сначала будет выполняться modulo, ограничивая значение -b → + b, а затем добавляем b, чтобы гарантировать, что это значение положительно, и пусть следующий модуль ограничивает его до 0 → b диапазона.

Примечание. Если значение b отрицательно, результат также будет отрицательным.

Ответ 6

Java фактически не имеет оператора modulo, как это делает C. % в Java - оператор остатка. В положительных целых числах он работает точно так же, как и по модулю, но он работает по-разному на отрицательных целых числах и, в отличие от modulo, может работать и с числами с плавающей запятой. Тем не менее, редко использовать% на чем угодно, кроме положительных целых чисел, поэтому, если вы хотите назвать это модулем, тогда не стесняйтесь!

Ответ 7

Код работает намного быстрее, не используя modulo:

public boolean isEven(int a){
    return ( (a & 1) == 0 );
}

public boolean isOdd(int a){
    return ( (a & 1) == 1 );
}

Ответ 8

if (a % 2 == 0) {
} else {
}

Ответ 9

вам следует изучить спецификацию перед использованием оператора "остатка" %:

http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.17.3

// bad enough implementation of isEven method, for fun. so any worse?
boolean isEven(int num)
{
    num %= 10;
    if(num == 1)
       return false;
    else if(num == 0)
       return true;
    else
       return isEven(num + 2);
}
isEven = isEven(a);

Ответ 10

Кроме того, mod можно использовать следующим образом:

int a = 7;
b = a % 2;

b будет равно 1. Потому что 7 % 2 = 1.

Ответ 11

Оператор остатка в Java равен %, а оператор modulo может быть выражен как

public int mod(int i, int j)
{
  int rem = i % j;
  if (j < 0 && rem > 0)
  {
    return rem + j;
  }
  if (j > 0 && rem < 0)
  {
    return rem + j;
  }
  return rem;
}

Ответ 13

Оператор modulo равен% (знак процента). Чтобы проверить равномерность или, как правило, по модулю для мощности 2, вы также можете использовать и (оператор и оператор), например isEven =! (A и 1).

Ответ 14

Другой способ:

boolean isEven = false;
if((a % 2) == 0)
{
    isEven = true;
}

Но самый простой способ:

boolean isEven = (a % 2) == 0;

Как сказал @Steve Kuo.

Ответ 15

В Java операция мода может быть выполнена следующим образом:

Math.floorMod(a, b)

Примечание: операция мода отличается от операции остатка. В Java оставшаяся операция может быть выполнена следующим образом:

a % b

Ответ 16

Как уже отмечалось, оператор % (остаток) не совпадает с математическим mod модуль/функция.

mod против %

Функция x mod n отображает x в n в диапазоне [0,n).
Принимая во внимание, что оператор x % n отображает x в n в диапазоне (-n,n).

Для того, чтобы иметь метод использовать операцию математического модуля, а не заботиться о знаке перед x можно использовать:

((x % n) + n) % n

Может быть, эта картинка помогает понять ее лучше (мне было трудно сначала обдумать это)

enter image description here

Ответ 17

Альтернатива коду из @Cody:

Используя оператор модуля:

bool isEven = (a % 2) == 0;

Я думаю, что это немного лучший код, чем запись if/else, потому что меньше дублирования и неиспользованной гибкости. Для этого требуется немного больше возможностей для мозга, но хорошее присвоение isEven компенсируется.