Javaで効率的なif/elseとは何ですか?

私は単純なif/elseを使ってJavaで偶数を調べるために別の値を返そうとしています。

if (move % 2 == 0) {
    return "o";
} else {
    return "O";
}

私はあなたが使用できるJavaScriptで知っている

if() : a ? b ;

これはJavaで使用できますか?

2
else が非常に効率的な場合は ...
追加された 著者 Rex M,
あなたはまたできません: return(move%2 == 0)? "o": "O";
追加された 著者 Blender,
3進: return(移動%2 == 0)? "o": "O"; - これはあなたのものと同等ですが、簡潔にするために非常に短い if-else (これは編集されました)
追加された 著者 wkl,
うわー、ありがとう@ Shakedown - 場所を編集しました。
追加された 著者 wkl,
@birryree:それは有効なステートメントではありません。あなたは言う: return(move%2 == 0)? "o": "O";
追加された 著者 Nate W.,

7 答え

はい、Javaで三項演算子を使うことができます:

return (move % 2 == 0) ? "o" : "O";

else の場合 if より速いとは思わないでください。

12
追加された
私はほんの数行のコードを減らしたいと思っていました。すべての回答をありがとう。
追加された 著者 Aaron,

はい、条件演算子をJava:

return (move % 2 == 0) ? "o": "O";

プログラムを速くすることはできませんが、少し簡潔です。条件付き演算子に精通していれば、読みやすくなるでしょう。

逆に、この演算子を知らない場合、コードが何をするのかを推測することは難しいでしょう。

3
追加された

if 対3進演算子を「最適化」するのではなく、 move%2 == 0 に焦点を当てるべきです。 move が浮動小数点変数ではない整数の場合、これはより速くなる可能性があります:

if( move & 1 == 0 )
    return "E";
else
    return "O";

通常、ビット演算は除算またはモジュロ計算より高速です。

1
追加された

Yes you can. It's called a ternary operator

使用法:

  true ? case1 : case2;             //returns case1
  false ? case1 : case2;            //returns case2
1
追加された
それはそれを使用する方法のかなり悪い例です。
追加された 著者 Nate W.,

あなたが本当にこれをすばやく高速にする必要がある場合は、これはかなり不審ですが、ルックアップテーブルも考慮する必要があります:

static final char[] moveChar = {"o", "O"};
// ...
return moveChar[move % 2];

しかし、私はここで与えられた提案を実行することなく、それらをタイミングなく実行することはできません。あなたが今持っているものが実際にボトルネックであることが証明されるまで、私は何もしません。 CPU時間の50%。

0
追加された

(条件付き)? if-true-statement:if-false-statement;

Yes it can, check out the Wikipedia page for Ternary Operators

0
追加された

あなたは多かれ少なかれ効率的な方法でif文を使用する方法はありません。

...そしてさらに - 念頭に置いておいてください。これはif文にのみ適用されるものではありません。

パフォーマンス上の理由から、使用する式を最適化しようとは決して決してしないでください。可読性に焦点を当てたコード(および保守性)を記述してください。これは、バイトコードを最適化し、バイトコードで指定した命令を変更するJIT(ジャストインタイムコンパイラ)があるためです。

三項演算子を使用することを考えているなら、これはコードを理解することが難しくなります(複数の人がコードを操作している場合)。コードで作業しているだけなら、あなたが好きなようにしてください。

Object var = boolean-expression ? some-value : another-value;

以下よりもはるかにコンパクトです:

Object var;
if (boolean-expression)
   var = some-value;
else
   var = another-value;
0
追加された