it-swarm-eu.dev

Jaká je syntaxe pro mod v javě

Jako příklad v pseudokódu:

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

Pro nezáporná celá čísla můžete použít remainder operator %. Přesný příklad:

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

To lze zjednodušit na jednu linii:

isEven = (a % 2) == 0;
338
Cody Hatch

Zde je znázornění vašeho pseudo-kódu v minimálním kódu Java;

boolean isEven = a % 2 == 0;

Teď to rozdělím na jeho komponenty. Operátor modulu v jazyce Java je znak procenta (%). Proto přijetí int% int vrátí další int. Operátor double equals (==) se používá k porovnání hodnot, například dvojice ints a vrací boolean. Toto je pak přiřazeno k logické proměnné 'isEven'. Na základě priority operátora bude modul před vyhodnocením vyhodnocen.

110
martinatime

Protože všichni ostatní již odpověděli, přidám trochu dalšího kontextu. operátor "modul" ve skutečnosti provádí zbytek operace. Rozdíl mezi mod a rem je jemný, ale důležitý.

(-1 mod 2) by normálně dalo 1. Více specificky dané dvě celá čísla, X a Y, operace (X mod Y) inklinuje k návratu hodnota v rozsahu [0, Y]. Jinak řečeno, modul X a Y je vždy větší nebo roven nule a menší než Y.

Provádění stejné operace s operátorem "%" nebo rem udržuje znak hodnoty X. Pokud je X záporné, dostanete výsledek v rozsahu (-Y, 0), pokud je X kladné, dostanete výsledek v rozsahu [0, Y]. 

Tento jemný rozdíl často nezáleží. Vraťme se zpět k otázce kódu, i když existuje několik způsobů, jak řešit "rovnost".

První přístup je dobrý pro začátečníky, protože je obzvláště podrobný.

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

Druhý přístup lépe využívá jazyka a vede k stručnějšímu kódu. (Nezapomeňte, že operátor == vrátí boolean.)

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

Třetí přístup je zde pro úplnost a využívá ternární operátora. Přestože je ternární operátor často velmi užitečný, v tomto případě považuji druhý přístup za nadřazený.

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

Čtvrtým a posledním přístupem je využití znalosti binární reprezentace celých čísel . Pokud je nejméně významný bit 0, pak je číslo sudé. To lze zkontrolovat pomocí bitového a operátora (&). I když tento přístup je nejrychlejší (děláte jednoduché bitové maskování místo dělení), je to možná trochu pokročilé/komplikované pro začátečníka.

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

Zde jsem použil bitový a operátor a reprezentoval jsem ho ve stručné formě uvedené v možnosti 2. Přepsání ve formuláři Option 1 (a alternativně možnost 3) je pro čtenáře ponecháno jako cvičení. ;)

Doufám, že to pomůže.

88
Rob Rolnick

Chcete-li, aby operace Java (% REM) fungovala jako MOD pro záporné hodnoty X a kladné hodnoty Y, můžete tuto metodu použít:

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

nebo s ternárním operátorem (kratší, ale není možné nebo méně efektivní v některých situacích):

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

I když je možné provést správné modulo tím, že zkontroluje, zda je hodnota záporná, a opravte ji, pokud je (jak mnozí navrhli), existuje kompaktnější řešení.

(a % b + b) % b

To nejprve provede modulo, omezí hodnotu na rozsah -b -> + b a pak přidá b, aby bylo zajištěno, že hodnota je kladná, což umožňuje dalšímu modulu omezit ho na rozsah 0 -> b.

Poznámka: Pokud je b záporné, výsledek bude také záporný

12
Stefan T

Kód běží mnohem rychleji bez použití modulo:

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

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

Java vlastně nemá operátora modulo, jak C dělá. % v Javě je zbytek operátora. Na kladná celá čísla, to funguje přesně jako modulo, ale to funguje jinak na záporných celých číslech a, na rozdíl od modulo, může pracovat s plovoucí desetinnou čárkou stejně. Přesto je to vzácné používat% na cokoliv, ale pozitivní celá čísla, takže pokud chcete volat to modulo, pak se bez obav! 

11
Greg Charles
if (a % 2 == 0) {
} else {
}
6
J D OConal

před použitím operátoru% „remainder“ byste měli prozkoumat specifikaci:

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);
4
kioto

Mod lze také použít takto:

int a = 7;
b = a % 2;

b by se rovnalo 1. Protože 7 % 2 = 1.

3
jjnguy

Operátor zbytku v jazyce Java je % a operátor modulo může být vyjádřen jako

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
eljenso

Jiný způsob je:

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

Ale nejjednodušší způsob je stále: 

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

Jako @Steve Kuo řekl.

1
brothers28

Operátor modulo je% (znak procenta). Chcete-li otestovat rovnoměrnost nebo obecně provést modulo pro výkon 2, můžete také použít & (operátor a) jako isEven =! (A & 1).

1
jjrv