Каков синтаксис для модификации в Java

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

224
задан sschuberth 17 November 2015 в 00:18
поделиться

11 ответов

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

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

Это может быть упрощено до остроты:

isEven = (a % 2) == 0;
348
ответ дан Community 23 November 2019 в 03:56
поделиться

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

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

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

я думаю, что это - незначительно лучший код, чем запись если/еще, потому что существует меньше дублирования & неиспользованная гибкость. Это действительно требует немного большей интеллектуальной мощи исследовать, но хорошее именование isEven компенсирует.

-2
ответ дан Jay Bazuzi 23 November 2019 в 03:56
поделиться

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

0
ответ дан jjrv 23 November 2019 в 03:56
поделиться

Кроме того, модификация может использоваться как это:

int a = 7;
b = a % 2;

b равнялся бы 1. Поскольку 7 % 2 = 1.

3
ответ дан jjnguy 23 November 2019 в 03:56
поделиться

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

boolean isEven = a % 2 == 0;

я теперь разломаю его на его компоненты. Оператор модуля в Java является символом процента (%). Поэтому взятие международного интервала % возвращает другой интервал, которому двойное равняется (==), оператор используется для сравнения значений, таких как пара ints и возвращает булевскую переменную. Это тогда присвоено логической переменной 'isEven'. На основе приоритета оператора модуль будет оценен перед сравнением.

110
ответ дан Clashsoft 23 November 2019 в 03:56
поделиться
if (a % 2 == 0) {
} else {
}
6
ответ дан Chris Jester-Young 23 November 2019 в 03:56
поделиться

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

Math.floorMod(a, b)

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

a % b
0
ответ дан 23 November 2019 в 03:56
поделиться

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

11
ответ дан 23 November 2019 в 03:56
поделиться

Так как все остальные уже дали ответ, добавлю немного дополнительного контекста. % оператора «модуля» фактически выполняет операцию остальной части. Разница между модом и 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) остается в качестве упражнения для читателя. ;)

Надежда, которая помогает.

92
ответ дан 23 November 2019 в 03:56
поделиться

Чтобы получить операцию 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;
}
32
ответ дан 23 November 2019 в 03:56
поделиться

Оператор остатка в 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;
}
3
ответ дан 23 November 2019 в 03:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: