假设我有一个包含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;
}
但我想也许有更优雅的解决方案......
答案 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>run
或pause>menu>quit
或{{1 }}。第一个块可能足以满足您的需求。
答案 4 :(得分:0)
我只是提供另一种选择。选择逻辑或思维过程中的任何一个套件
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;
}
}
}