247

擬似コードの例として:

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

17 に答える 17

379

セマンティクスがわずかに異なるモジュロ演算子の代わりに、非負の整数に対して剰余演算子を使用できます%。あなたの正確な例:

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

これは、ワンライナーに簡略化できます。

isEven = (a % 2) == 0;
于 2008-09-18T05:18:58.177 に答える
111

以下は、最小限の Java コードでの疑似コードの表現です。

boolean isEven = a % 2 == 0;

ここで、それをコンポーネントに分解します。Java のモジュラス演算子はパーセント文字 (%) です。したがって、int % int を取得すると、別の int が返されます。二重等号 (==) 演算子は、int のペアなどの値を比較するために使用され、ブール値を返します。これはブール変数「isEven」に割り当てられます。演算子の優先順位に基づいて、比較の前にモジュラスが評価されます。

于 2008-09-18T05:18:33.467 に答える
96

他の誰もがすでに答えを出しているので、少し追加のコンテキストを追加します。% 「モジュラス」演算子は、実際には剰余演算を実行しています。mod と rem の違いは微妙ですが、重要です。

(-1 mod 2) は通常 1 を返します。具体的には、2 つの整数 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
}

2 番目のアプローチは、言語をより有効に活用し、より簡潔なコードにつながります。(== 演算子がブール値を返すことを忘れないでください。)

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

3 番目のアプローチは完全を期すためにここにあり、三項演算子を使用します。多くの場合、三項演算子は非常に便利ですが、この場合は 2 番目の方法が優れていると思います。

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

最後の 4 番目のアプローチは、整数のバイナリ表現の知識を使用することです。最下位ビットが 0 の場合、数値は偶数です。これは、ビット AND 演算子(&)を使用して確認できます。このアプローチは最も高速ですが (除算の代わりに単純なビット マスキングを行っています)、初心者にとってはおそらく少し高度/複雑です。

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

ここでは、ビットごとの and 演算子を使用し、オプション 2 に示す簡潔な形式で表現しました。オプション 1 の形式 (またはオプション 3 の形式) での書き直しは、読者の課題として残されています。;)

それが役立つことを願っています。

于 2010-01-15T18:10:03.853 に答える
35

Java の % (REM) 操作を負の X 値と正の Y 値に対して MOD のように機能させるには、次のメソッドを使用できます。

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;
}
于 2010-01-31T14:40:37.173 に答える
12

Java には、実際には C のようなモジュロ演算子はありません。Java の % は剰余演算子です。正の整数では、モジュロとまったく同じように機能しますが、負の整数では異なる方法で機能し、モジュロとは異なり、浮動小数点数でも機能します。それでも、正の整数以外に % を使用することはめったにありません。したがって、モジュロと呼びたい場合は、お気軽に!

于 2010-01-15T17:57:45.883 に答える
11

モジュロを使用しないと、コードははるかに高速に実行されます。

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

public boolean isOdd(int a){
    return ( (a & 1) == 1 );
}
于 2010-10-12T16:48:34.633 に答える
6

Java では、%演算子 は15.17.3 です。剰余演算子 %

異なる符号を持つ引数の場合とは異なる結果を与えるクラスにもあることに注意してくださいfloorModjava.lang.Math%

public static int floorMod​(int x, int y)

于 2018-03-04T12:02:04.903 に答える
6

他の人が指摘したように、 (剰余)演算子は数学モジュラス演算/関数%と同じではありません 。mod

mod%

関数はの範囲にx mod nマップxされます。 一方、演算子は の範囲で にマップされます。n[0,n)
x % nxn(-n,n)

数学的モジュラス演算を使用し、前の符号を気にしない方法を使用するには、次を使用xできます。

((x % n) + n) % n

たぶん、この写真はそれをよりよく理解するのに役立ちます(最初に頭を悩ませました)

ここに画像の説明を入力

于 2019-08-17T01:54:44.897 に答える
5
if (a % 2 == 0) {
} else {
}
于 2008-09-18T05:18:36.400 に答える
4

「剰余」演算子 % を使用する前に、指定を調べる必要があります。

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);
于 2011-01-18T15:41:02.147 に答える
3

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;
}
于 2010-07-28T15:08:17.843 に答える
3

また、mod は次のように使用できます。

int a = 7;
b = a % 2;

bは 1 になります7 % 2 = 1

于 2008-09-18T05:19:56.723 に答える
1

別の方法は次のとおりです。

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

しかし、最も簡単な方法はまだです:

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

@Steve Kuoが言ったように。

于 2014-05-12T13:44:21.527 に答える
-1

モジュロ演算子は % (パーセント記号) です。偶数性をテストしたり、一般に 2 の累乗のモジュロを実行したりするには、isEven = !( a & 1 ) のように & (and 演算子) を使用することもできます。

于 2008-09-18T05:18:35.277 に答える
-3

@Cody のコードの代替:

モジュラス演算子の使用:

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

これは if/else を書くよりもわずかに優れたコードだと思います。重複が少なく、柔軟性が未使用であるためです。調べるにはもう少し頭脳の力が必要ですが、良いネーミングがそれをisEven補ってくれます。

于 2008-09-18T19:19:22.980 に答える