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 で割った余り。このように、0、1、2、0、1、2 i、...

于 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>runまたはpause>menu>quitまたはに変更できgameover>gamerunningます。おそらく最初のブロックで十分です。

于 2013-05-10T00:55:12.927 に答える
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 に答える
0

たぶん、代わりに無限ループを実行するでしょう...

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