2

假设我有一个包含 4 个元素的数组,并且我想循环遍历它们直到满足某个条件,那么最好的方法是什么?我的想法是这样的:

ArrayList<Player> myList = new ArrayList<Player>();
myList.add(new Player("a"));
myList.add(new Player("b"));
myList.add(new Player("c"));

for(int i = 0; i < 3; i++) {

    if(isGameOver)
         break;

     if(i == 2)
        i = 0;
}

但我认为也许有一个更优雅的解决方案......

4

5 回答 5

3

打破循环的条件应该在循环中使用while

int i = 0;
while (!isGameOver)
{
    // Do something here.

    i = (i + 1) % 3;
}

这里,%是模算子;即除以3时的余数。这样,i​​是0,1,2,0,1,2,...

于 2013-05-10T00:38:27.997 回答
1

我想我更喜欢:

while (!isGameOver) {
    for(int i = 0; i < myList.size(); i++) {

    }
}

或使用foreach构造:

while (!isGameOver) {
    foreach(Player p : myList) {

    }
}
于 2013-05-10T00:39:26.987 回答
0
while(true) {
    while(!isGameOver){
        for(Player p : myList){
            p.doSomething();
        }
    }

    while (otherGameStates){
    }

    while(paused...){
    }
}

这是假设您在游戏循环中的某个地方执行此操作。while true允许状态更改(如果您的游戏中有多个状态)允许游戏从变为pause>run可能pause>menu>runpause>menu>quitgameover>gamerunning。第一个块可能足以满足您的需求。

于 2013-05-10T00:55:12.927 回答
0

也许你会做一个无限的while循环......

int k=0;
int n=myList.size();
do {
  int i = k++ % n;
  // use i
while(!GameOver);
于 2013-05-10T00:40:39.087 回答
0

@rgettman 的回答很棒:)

我只是提供另一种选择。选择符合逻辑或思维过程的套件

mainProcessLoop:
while (!gameOver) { // or while(true), if you are sure 
                    // that the collection is never empty
  for (Player player: players) {
    // do whatever you need for player

    if (gameOver) {
        break mainProcessLoop;
    }
  }
}
于 2013-05-10T02:24:16.057 回答