我在编写多变量for循环方面遇到了一些麻烦。
我如何将这些for循环写为for循环。
for (x1pos = 5; x1pos <= 105; x1pos+=4)
{
for (x2pos = 105; x2pos >= 5; x2pos-=4)
{
}
}
答案 0 :(得分:1)
首先,让我们来看看你的循环产生的输出。我会在内循环中加上System.out.printf("%d, %d%n", x1pos, x2pos)
。输出看起来像这样:
5, 105
5, 101
5, 97
...
5, 5
9, 105
9, 101
9, 107
...
105, 5
那么,这里发生了什么?
x1pos
为5,x2pos
为105 x2pos
每次下降4次x1pos
增加4 x1pos
已经为105时发生这种情况,则模式结束好的,很酷。现在我们只需要在Java中实现该逻辑:
// initial values; and x2pos goes down by 4 each time
for (int x1pos = 5, x2pos = 105; ; x2pos -= 4) {
if (x2pos < 5) { // if x1pos reaches 5...
if (x1pos >= 105) { // ...then if x1pos reached 105 already, we're done.
break;
} else {
x2pos = 105; // Otherwise, reset x2pos and increment x1pos.
x1pos += 4;
}
}
// Now you can do whatever with the values, such as:
System.out.printf("%d, %d%n", x1pos, x2pos);
}
注意:
x1pos
和x2pos
,这似乎很直观for
条款中;我把它塞进了循环里面。 (这可以作为for
中的条件来完成,但这种方式更简单)x2pos
,因为这是唯一一个始终更改的变量for
的正文中,而不是for(...)
本身。同样,您可以在for
中完成所有操作(使用辅助方法,如x1pos = nextX1Pos(x1pos, x2pos)
,但这更简单正如您所看到的,这是更多的代码,很多不如您的两个循环清晰。 你应该只使用嵌套循环。没有办法循环所有那些效率更高的组合,并且嵌套循环更清晰,更不容易出错。
答案 1 :(得分:-1)
for (x1pos = 5, x2pos = 105; x1pos <= 105 && x2pos >= 5; x1pos+= 4, x2pos-=4) {
请注意,x1pos
和x2pos
必须属于同一类型。