for循环上的不同增量取决于布尔值

时间:2013-09-28 14:45:10

标签: java for-loop increment termination decrement

如何根据布尔值选择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 个答案:

答案 0 :(得分: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;
    …
}

答案 1 :(得分:0)

for(initialization;condition; increment/decrement){}

如果condition循环的for部分失败,那么increment部分将无效。

答案 2 :(得分:0)

我会这样做:

int end = isdown ? iniY - endY : dy;

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

也就是说,找出差异并循环。它更容易理解。

答案 3 :(得分:0)

我会说你的代码中有一股很大的气味。我会专注于重构你的代码,而不是试图破解这个特定的位来使它工作。如果代码依赖于许多变量来喷射到提取的方法中,那么设计中的某些东西似乎是错误的。