3
for (int i = 0; i < X; i++)
   myitem = (checkedDB) ? dirtyItem : cleanItem;

同じステートメントでcheckedDBを反転する方法があるかどうかを知りたかったのです。つまり、次の反復checkedDBはその値の反対であり、XORのようです。

4

3 に答える 3

6

どうですか:

for (int i = 0; i < X; i++)
    myitem = !(checkedDB = !checkedDB) ? dirtyItem : cleanItem;

一見しただけでは読みにくい/理解できないかもしれませんが、1 つのステートメントで必要なことを実行できます。

于 2010-05-01T00:11:31.627 に答える
3

最善の答え、IMOは、自尊心があればそうではありません. 結果は見苦しく混乱を招き、何の利益も得られません。よりクリーンで理解しやすい 2 つの異なるソリューションを次に示します。

for (int i = 0; i < X; i++)
{
    myitem = checkedDB ? dirtyItem : cleanItem;
    checkedDB = !checkedDB;
}

次のバージョンは、追加の変数を必要とせず、1 行の目標を達成します。

for (int i = 0; i < X; i++)
{
    myitem = i%2 == 0 ? dirtyItem : cleanItem;
}
于 2010-05-01T00:30:06.463 に答える
0

ブール値を切り替える 1 つの方法は次のbool ^= trueとおり です。

for (int i = 0; i < X; i++)
{
   myitem = (checkedDB ^= true) ? cleanItem : dirtyItem;
}

それらのいずれかが選択される前に切り替えたので、交換cleanItemしました。dirtyItemcheckedDB

checkedDb ^= trueoverを使用する利点はcheckedDB = !checkedDB、変更するつもりだったことが明らかであり、checkedDB誤って==比較をタイプミスしていないことです。

言語を指定していないため、あなたの言語が三項演算子の条件部分で代入を許可するかどうかはわかりません。

于 2010-05-01T00:20:33.327 に答える