Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Для неотрицательных целых чисел можно использовать остаток оператор %
. Для Вашего точного примера:
if ((a % 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
Это может быть упрощено до остроты:
isEven = (a % 2) == 0;
Альтернатива коду от @Cody:
Используя оператор модуля:
bool isEven = (a % 2) == 0;
я думаю, что это - незначительно лучший код, чем запись если/еще, потому что существует меньше дублирования & неиспользованная гибкость. Это действительно требует немного большей интеллектуальной мощи исследовать, но хорошее именование isEven
компенсирует.
Оператор по модулю является % (знак процента). Для тестирования на четность или обычно делают по модулю для питания 2, можно также использовать & (и оператор) как isEven =! (& 1).
Кроме того, модификация может использоваться как это:
int a = 7;
b = a % 2;
b
равнялся бы 1. Поскольку 7 % 2 = 1
.
Вот представление Вашего псевдокода в минимальном коде Java;
boolean isEven = a % 2 == 0;
я теперь разломаю его на его компоненты. Оператор модуля в Java является символом процента (%). Поэтому взятие международного интервала % возвращает другой интервал, которому двойное равняется (==), оператор используется для сравнения значений, таких как пара ints и возвращает булевскую переменную. Это тогда присвоено логической переменной 'isEven'. На основе приоритета оператора модуль будет оценен перед сравнением.
В Java
операция mod может быть выполнена следующим образом:
Math.floorMod(a, b)
Примечание: Операция mod отличается от операции остаток . В Java
операция остаток может быть выполнена следующим образом:
a % b
Java на самом деле не имеет оператора модуля, способ C делает. % в Java - остаток оператора. На положительных целых числах он работает точно так же, как модуло, но он работает по-разному на отрицательных целых числах и, в отличие от модуля, может работать и с плавающими точками. Тем не менее, редко использовать% на что-нибудь, кроме позитивных целых чисел, поэтому, если вы хотите назвать это модулем, то не стесняйтесь!
Так как все остальные уже дали ответ, добавлю немного дополнительного контекста. % оператора «модуля» фактически выполняет операцию остальной части. Разница между модом и 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);
Третий подход здесь для полноты, и использует оператор Terrary . Хотя Темнарный оператор часто очень полезен, в этом случае я считаю, что второй подход выше.
// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;
Четвертый и окончательный подход состоит в том, чтобы использовать знание двоичного представления целых чисел . Если наименее значимый бит равен 0, то число даже. Это можно проверить с помощью побитового и оператора (&). Хотя этот подход является самым быстрым (вы делаете простой битовый маскирующий вместо дивизии), это, возможно, немного продвинутся / сложный для новичка.
// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);
Здесь я использовал битовой и оператор, и представлял его в кратчайшей форме, показанной в варианте 2. Перезаписи его в форме параметра 1 (и альтернативно вариант 3) остается в качестве упражнения для читателя. ;)
Надежда, которая помогает.
Чтобы получить операцию Java% (RIM) работать как MOD для отрицательных х и положительных значений 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;
}