擬似コードの例としては、
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(==)演算子は、一対の整数などの値を比較するために使用され、ブール値を返します。これがブール変数 'isEven'に代入されます。演算子の優先順位に基づいて、モジュラスは比較の前に評価されます。
他の誰もがすでに答えを出しているので、私はもう少し文脈を追加します。 "モジュラス"演算子は実際には剰余演算を実行しています。 modとremの違いは微妙ですが重要です。
より具体的には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番目のアプローチは完全を期すためのもので、 ternary 演算子を使います。三項演算子が非常に役立つことが多いのですが、この場合は2番目のアプローチが優れていると考えます。
// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;
4番目のそして最後のアプローチは整数の バイナリ表現の知識を使うことです 。最下位ビットが0の場合、数値は偶数です。これは bitwise-and演算子 (&)を使って確認できます。このアプローチは最速ですが(除算の代わりに単純なビットマスキングを行っています)、初心者にとってはおそらく少し高度/複雑です。
// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);
ここではビットごとのand演算子を使い、それをオプション2に示す簡潔な形式で表現しました。オプション1の形式(そしてオプション3の形式)に書き換えることは、読者への課題として残しておきます。 ;)
それが役立つことを願っています。
負のX値と正のY値に対して、Javaの%(REM)操作を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;
}
値が負であるかどうかをチェックして適切なモジュロを実行し、正であればそれを修正することは可能ですが(多くの方法が推奨しています)、よりコンパクトな解決策があります。
(a % b + b) % b
これは最初にモジュロを行い、値を-b - > + bの範囲に制限し、次に値が正であることを確認するためにbを追加し、次のモジュロが0 - > bの範囲に制限するようにします。
注:bが負の場合、結果も負になります
コードはモジュロを使用せずにはるかに速く実行されます。
public boolean isEven(int a){
return ( (a & 1) == 0 );
}
public boolean isOdd(int a){
return ( (a & 1) == 1 );
}
Javaには、Cのようにモジュロ演算子がありません。 Javaの%は剰余演算子です。正の整数では、モジュロとまったく同じように機能しますが、負の整数では異なる動作をします。モジュロとは異なり、浮動小数点数でも機能します。それでも、正の整数以外のものに%を使用することはめったにありません。そのため、モジュロと呼びたい場合は、気軽にください。
if (a % 2 == 0) {
} else {
}
あなたは '剰余'演算子%を使う前に仕様を調べるべきです:
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);
また、modは次のように使用できます。
int a = 7;
b = a % 2;
b
は1になります。7 % 2 = 1
。
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;
}
別の方法は:
boolean isEven = false;
if((a % 2) == 0)
{
isEven = true;
}
しかし、最も簡単な方法はまだあります:
boolean isEven = (a % 2) == 0;
@Steve Kuoが言ったように。
モジュロ演算子は%(パーセント記号)です。均一性をテストしたり、通常は2のべき乗でモジュロを実行するには、isEven =!(a&1)のように&(およびand演算子)を使用することもできます。
Javaではそれは%
演算子です: 15.17.3。剰余演算子%
Java.lang.Math
クラスには floorMod
もあります。これは、%
とは符号が異なる引数に対して異なる結果になります。
Java
では、mod操作を次のように実行できます。
Math.floorMod(a, b)
注:mod操作はremainder操作とは異なります。 Java
では、remainder操作を次のように実行できます。
a % b