循环的多变量

时间:2014-05-08 04:32:10

标签: java loops

我在编写多变量for循环方面遇到了一些麻烦。

我如何将这些for循环写为for循环。

for (x1pos = 5; x1pos <= 105; x1pos+=4)
{
    for (x2pos = 105; x2pos >= 5; x2pos-=4)
    {
    }
}

2 个答案:

答案 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次
  • ...除了如果它达到5,它“重置”到105并且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);
}

注意:

  • 我最初设置了x1posx2pos,这似乎很直观
  • 我没有条件停在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) {

请注意,x1posx2pos必须属于同一类型。