3

コードの最小化と強化に取り組んでいます。私の質問は: コードのロジックを破壊せずに上記の if ステートメントを交換することは可能ですか?

    int c1 = Integer.parseInt(args[0]) ;
    int c2 = Integer.parseInt(args[1]) ;
    int c3 = Integer.parseInt(args[2]) ;

    if (c2-c1==0)
      if ( c1 != c3 )

両方の if ステートメントの間に変数を書き込む操作がないため、はいと言いますが、よくわかりません。

何か案は?

4

5 に答える 5

10

(c2 - c1 == 0)なぜあなたが代わりに欲しいのか本当にわかりませんc1 == c2

なぜ行かない

if ((c1 == c2) && (c1 != c3)){
  do_stuff();
}

また

if ((c1 != c3) && (c1 == c2)){
  do_stuff();
}

ルート

注意として、どこでも c1 を c2 に切り替えることによる不利益や利点はありません。上記のうち、失敗する可能性が最も高い条件を最初に置くと、最初の条件が失敗した場合に 2 番目の条件が評価されないため、わずかに効率的です。

また、これはマイクロ最適化であるため、速度については考慮しないでください。

3 つ目の注意点として、プログラムが他に何もせず、この条件が満たされない場合に終了し、本当にマイクロ最適化を行いたい場合 (これは行いません)、引数が適切であることを知る前に、引数を解析しないことをお勧めします。必要です。ほとんどの場合、c1 が c2 と等しくない場合は、チェックする必要があることがわかるまで、c3 の解析を待つことができます。これは厳密には理論です。コードが読みにくくなるため、実際にはこれを行わないでください。できるだけ早くすべてのコマンドライン変数を適切なものに処理する方がはるかに明確です。

于 2010-10-31T08:26:35.273 に答える
3
int c1 = Integer.parseInt(args[0]) ;
int c2 = Integer.parseInt(args[1]) ;
int c3 = Integer.parseInt(args[2]) ;

if (c2 == c1 && c1 != c3 ) {
   ...
}
于 2010-10-31T08:30:10.610 に答える
1

はい。と書くこともできますif ((c2-c1==0) && (c1 != c3))

于 2010-10-31T08:21:20.180 に答える
1

つまり

if ((c1 != c3) && (c2-c1==0))

はいの場合にのみ、何か特別なことをする予定はありませんc2-c1==0

于 2010-10-31T08:22:07.290 に答える
1

関連するelseブロックがない場合は、次のように記述することをお勧めします。

if (c2-c1==0 && c1 != c3 )

または、それらを交換したい場合は、

if (c1 != c3 && c2-c1==0)
于 2010-10-31T08:23:58.700 に答える