В качестве примера в псевдокоде:Что синтаксис для мод в Java
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
В качестве примера в псевдокоде:Что синтаксис для мод в Java
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
Для неотрицательных целых чисел, вы можете использовать остаточный оператор %
. Для вашего точного примера:
if ((a % 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
Это может быть упрощен до однострочника:
isEven = (a % 2) == 0;
Вот является представлением вашего псевдокода в минимальном коде Java;
boolean isEven = a % 2 == 0;
Теперь я разбиваю его на компоненты. Оператор модуля в Java является символом процента (%). Следовательно, взятие int% int возвращает другой int. Оператор double equals (==) используется для сравнения значений, таких как пара int и возвращает логическое значение. Затем он присваивается логической переменной «isEven». Основываясь на приоритете оператора, модуль будет оцениваться перед сравнением.
Оператор modulo равен% (знак процента). Чтобы проверить равномерность или, как правило, по модулю для мощности 2, вы также можете использовать & (оператор и оператор), например isEven =! (A & 1).
if (a % 2 == 0) {
} else {
}
Кроме того, моды могут быть использованы, как это:
int a = 7;
b = a % 2;
b
будет равен 1. Потому что 7 % 2 = 1
.
Альтернатива код из @Cody:
Используя оператор модуля:
bool isEven = (a % 2) == 0;
Я думаю, что это немного лучше, чем писать код, если/иначе, потому что меньше дублирования & неиспользованной гибкости , Для этого требуется немного больше возможностей мозга, но хорошее назначение isEven
компенсирует.
На самом деле у Java нет оператора modulo, как это делает C. % в Java - оператор остатка. В положительных целых числах он работает точно так же, как и по модулю, но он работает по-разному на отрицательных целых числах и, в отличие от modulo, может работать и с числами с плавающей запятой. Тем не менее, редко можно использовать% на чем угодно, кроме положительных целых чисел, поэтому, если вы хотите назвать это модулем, тогда не стесняйтесь!
Поскольку все остальные уже дали ответ, я добавлю дополнительный контекст. % оператор «модуль» фактически выполняет операцию останова. Разница между модом и речью - тонкая, но важная.
(-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);
Третий подход здесь для полноты картины, и использует оператор ternary. Хотя тройной оператор часто очень полезен, в этом случае я считаю, что второй подход выше.
// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;
Четвертый и последний подход заключается в использовании знания binary representation of integers. Если младший значащий бит равен 0, то число четное. Это можно проверить, используя bitwise-and operator (&). Хотя этот подход является самым быстрым (вы делаете простую битовую маскировку вместо деления), это, возможно, немного продвинуто/сложно для новичков.
// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);
Здесь я использовал побитовое и оператора, и представлял его в сжатой форме, показанной в варианте 2. Перезапись его в варианте 1 в форме (и в качестве альтернативы Вариант 3-х) остается в качестве упражнения для читателя. ;)
Надеюсь, что это поможет.
Чтобы получить% в 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;
}
оператор остаток в Java является %
и оператор по модулю может быть выражен как
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;
}
код работает гораздо быстрее, без использования по модулю:
public boolean isEven(int a){
return ((a & 1) == 0);
}
public boolean isOdd(int a){
return ((a & 1) == 1);
}
вы должны изучить спецификации перед использованием 'остаток' оператор%:
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);
Хотя это можно сделать Собственно по модулю, проверяя, является ли значение отрицательным, и исправьте его, если оно (как многие предложили), существует более компактное решение.
(a % b + b) % b
Это будет первым сделать по модулю, ограничивая значение в -b -> + диапазон б, а затем добавить б для того, чтобы гарантировать, что значение является положительным, давая следующий предел по модулю его к 0 - > b.
Примечание: Если б отрицателен, то результат также будет отрицательным
Другой способ:
boolean isEven = false;
if((a % 2) == 0)
{
isEven = true;
}
Но самый простой способ по-прежнему:
boolean isEven = (a % 2) == 0;
Как @Steve Куо сказал ,
В Java это %
оператор: 15.17.3. Remainder Operator %
Обратите внимание, что есть и в java.lang.Math
классе, который даст другой результат от %
аргументов с разными знаками floorMod
:
. Если/else не нужно, просто используйте isEven = (a% 2) == 0, – 2010-07-28 15:12:45
Осторожно с терминами mod и modular, потому что n (mod m) ВСЕГДА> = 0, но не n% m. n% m находится в диапазоне> -m и
Jim
2012-08-24 22:36:48
Почему ``% 2` помещается в скобки перед `== 0`? – 2014-06-03 19:09:55