【问题标题】:Different increment on a for loop depending on a booleanfor 循环上的不同增量取决于布尔值
【发布时间】:2013-09-28 14:45:09
【问题描述】:

如何根据布尔值在 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...
        }

无法将代码提取到新方法,因为它适用于许多变量...

【问题讨论】:

  • 为什么这么复杂,下一个程序员会看看,会浪费时间去理解和调试。我在第二个示例中没有看到任何问题,但由于 Java 不是 bash 脚本 ...
  • 当前代码有什么问题?
  • @Aaron 你将如何调试这行代码:for (int y = iniY; isdown? (y &gt;= endY): (y &lt;= iniY+dy) ; isdown? --y:y++);
  • @MaximShoustin 我不会。我会改用当前代码,除非它有问题。
  • @Aaron,不,没有错,只是设计

标签: java for-loop increment termination decrement


【解决方案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;
    …
}

【讨论】:

    【解决方案2】:
    for(initialization;condition; increment/decrement){}
    

    如果for 循环的condition 部分失败,则increment 部分将不起作用。

    【讨论】:

    • 我不明白,你的意思是这样的:for (int y = iniY; isdown? (y >= endY): (y
    【解决方案3】:

    我会这样做:

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

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

    【讨论】:

      【解决方案4】:

      我会说你的代码有很大的味道。我会专注于重构您的代码,而不是试图破解这个特定的位以使其工作。如果代码依赖于许多变量来注入提取的方法,那么设计中似乎有问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-03
        • 1970-01-01
        • 2013-04-06
        • 1970-01-01
        • 2020-01-28
        • 2013-08-09
        • 2016-10-23
        • 2014-01-21
        相关资源
        最近更新 更多