循环数组

时间:2013-05-10 00:36:42

标签: java

假设我有一个包含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;
}

但我想也许有更优雅的解决方案......

5 个答案:

答案 0 :(得分:3)

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

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

    i = (i + 1) % 3;
}

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

答案 1 :(得分:1)

我想我更喜欢:

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

    }
}

或使用foreach构造:

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

    }
}

答案 2 :(得分:0)

也许你会做一个无限的循环而不是......

int k=0;
int n=myList.size();
do {
  int i = k++ % n;
  // use i
while(!GameOver);

答案 3 :(得分:0)

while(true) {
    while(!isGameOver){
        for(Player p : myList){
            p.doSomething();
        }
    }

    while (otherGameStates){
    }

    while(paused...){
    }
}

这是假设您在游戏循环中的某个位置执行此操作。 while true允许状态更改(如果您的游戏中有多个状态),允许游戏从pause>run转到pause>menu>runpause>menu>quit或{{1 }}。第一个块可能足以满足您的需求。

答案 4 :(得分: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;
    }
  }
}