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 回答