なぜ、この作業を行いますが、私は期待できないと?Javaの条件演算子

ウォルター:

私は、Javaを学んだし、この少しの時間表示をしていました。そして、この部分はトリッキーです。

int second = 66;
second = ((second >= 0) && (second < 60) ? second : (second % 60) & (minute += second / 60));

戻り第二の場合0〜60、それ以外のリターン秒〜60%と分を増やします。私は仕事にそれを期待しますが、2番目の出力は、次のとおりです。 1

無し

(minute += second / 60)

それが働きました。変更60何のesleにし、同様に第二の変化の値を見ます。どうしたの?

ジョンスキート:

あなたは、&ビット単位の実行している&新しいのminuteと価値second % 60良いアイデアことは非常に考えにくいです。

あなたは副作用を望んでいることを考えると、私は強く、ここで条件演算子を使用していないお勧めします-ちょうど使用if声明を:

if (second > 60)
{
    minute += second / 60;
    second = second % 60;
}

(あなたが負の値を処理する必要がある場合は、おそらくより多くのコードが必要になります - それはあなたが望む結果によって異なります。)

ここで奪う教訓は条件演算子をするために使用されていることである値を計算しますあなたのケースでは、あなたは本当に取って興味のあるアクションをではなく、値を計算する:「場合はsecond変数がすでに正規化されていない、メイクの両方に変更secondし、minute」。それはあなたが考える作るべきif声明ではなく、条件演算子。そこには時間がたくさんあることができ、条件演算子を使用するには、使用することを明確だろうif声明を。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=31444&siteId=1