9

我正在尝试编写以下“while”循环:

int x = N-1, y = 0;

while ( y < M ) {

    /* Some work */

    if ( x > 0 )
        x--;
    else 
        y++;

}

作为“for”循环。这是我失败的尝试:

for ( int x = N-1, y = 0 ; y < M ; ((x>0)?x--:y++) ) {
    /* Some work */
}

这无法编译,因为正如编译器所说,更新规则不是语句。

您是否看到任何将上面的“while”循环自然地编写为“for”循环的方法?

4

3 回答 3

14

您可以随时将更新规则留空

for ( int x = N-1, y = 0 ; y < M ; ) {

 if ( x > 0 )
        x--;
    else 
        y++;

}
于 2012-12-19T14:46:41.900 回答
13

结合条件。

 for(int x = N-1, y = 0; y < M ; y += (x > 0)?0:1, x += (x > 0)?-1:0)

我怀疑这应该是两个循环调用一个通用方法。

 for(int x = N - 1; x >= 0; x--)
     someMethod(x, 0);
 for(int y = 0; y < M; y++)
     someMethod(0, y);
于 2012-12-19T14:49:53.310 回答
1

/* Some work */

包括变量 x 和 y?如果没有,有一种更简单的方法来编写循环的逻辑。目前,您的循环从 N-1 计数到零 (x),然后从零计数到 M-1 (y)。整个循环运行 (M+N)-1 次。

通过组合初始条件,您可以编写:

for (int x = 1; x < M+N; x++) {
    /* Some work */
}

并完全取消 y 变量。

如果您需要将 x 和 y 变量保留为这些值,只需使用第三个变量:

for (int z = 1; z < M+N; z++) {
    /* Some work */
    (x>0)?x--:y++;
}

希望这可以帮助!

杰克

于 2012-12-19T14:58:28.973 回答