0

ブール値に応じて for ループのインクリメントを選択するにはどうすればよいですか。次のようなことをしようとしています。

    for (int y = iniY; isdown? (y >= endY): (y <= iniY+dy) ; isdown? --y:y++);

forループは終了を受け入れますが、インクリメントは受け入れません...

私が現在持っている作業コードは次のようなものです:

    if(isdown)
        for (int y = iniY; y >= endY; --y) {
            code lines...
        }
    else
        for (int y = iniY; y <= iniY+dy; ++y) {
            code lines...
        }

多くの変数で機能するため、コードを新しいメソッドに抽出することはできません...

4

4 に答える 4

1

minitech のソリューションに似ていますが、ループ内に分岐がありません。

int end = isdown ? iniY - endY : dy;
int direction = isdown ? -1 : +1;

for(int i = 0; i <= end; i++) {
    int y = iniY + direction * i;
    …
}
于 2013-09-28T14:50:29.823 に答える
0
for(initialization;condition; increment/decrement){}

conditionループの一部forが失敗すると、一部incrementが機能しなくなります。

于 2013-09-28T14:47:49.300 に答える
0

私はこれをします:

int end = isdown ? iniY - endY : dy;

for(int i = 0; i <= end; i++) {
    int y = isdown ? iniY - i : iniY + i;
    …
}

つまり、違いを見つけて、それをループします。理解しやすいです。

于 2013-09-28T14:49:05.743 に答える
0

あなたのコードには大きな臭いがあると思います。この特定のビットをハックして機能させようとするのではなく、コードのリファクタリングに集中します。コードが抽出されたメソッドに噴出する多くの変数に依存している場合、設計に何か問題があるように見えます。

于 2013-09-28T15:03:23.030 に答える