Question

  

Possible en double:    Comment briser de la boucle principale / extérieure dans une double boucle / imbriqué?

J'ai la situation suivante:

      for(int i = 0; i < schiffe.length-1; i++){
            if(schiffe[i].schaden){
                schlepper.fliege(schiffe[i].x, 
                                 schiffe[i].y, 
                                 schiffe[i].z);
                schlepper.wirdAbgeschleppt = schiffe[i];
                for(int k = 0; k < stationen.length-1; k++){
                    if(stationen[k].reparatur == null){
                        schlepper.fliege(stationen[k].x,
                                         stationen[k].y,
                                         stationen[k].z);
                        break;
                    }
                }
            }
        }

Je veux

schlepper.fliege(stationen[k].x,
                 stationen[k].y,
                 stationen[k].z);

être effectuée une fois, puis sortir de la boucle intérieure et continuer avec le for (int i ... boucle. Donc je une pause dans mon code. Mais je ne suis pas vraiment sûr si cela est juste. Est-ce que la pause faire une pause pour toutes les boucles ou juste pour la deuxième boucle?

Était-ce utile?

La solution

Il casse que la boucle intérieure, et donc ce que vous voulez. Pour briser plus d'un niveau, en Java, vous pouvez utiliser un « break étiqueté » comme ceci:

schiffe_loop:
for(int i = 0; i < schiffe.length-1; i++){
    some_stuff();
    for(int k = 0; k < stationen.length-1; k++){
        if (something_really_bad_happened()) {
            break schiffe_loop;
        }
    }
}

Mais en général, vous ne aurez pas besoin.

Vous pouvez envisager de faire une méthode distincte pour la boucle intérieure de toute façon; c'est quelque chose que vous pouvez facilement donner un nom à ( « find_available_station » ou quelque chose comme ça), et aura probablement besoin d'un autre endroit.

En outre, s'il vous plaît noter que vos boucles seront dès maintenant rater le dernier élément de chaque tableau. Réfléchissez bien pourquoi vous utilisez mais ne comprenant pas celui spécifié.

Autres conseils

break va briser la boucle la plus interne, dans votre cas boucle 2.

Pour faire briser la boucle extérieure, vous pouvez utiliser une pause étiqueté comme:

OUTER:for(...) {
         for(...) {
            break OUTER;
         }
      }

break casse seulement hors de la boucle la plus intérieure.

rupture provoque la rupture de la boucle la plus proche uniquement (seconde boucle)

Juste le second. Vous pouvez utiliser "goto" bien sûr.

Pause déclaration met fin à la boucle la plus proche ou englobante instruction switch dans lequel il apparaît dans de nombreuses langues, mais vous pouvez l'essayer et être sûr à 100%.

mettre les deux boucles internes dans un retour de la fonction et l'utilisation de sortir des deux.

Si vous avez besoin d'un plus grand contrôle, vous pouvez utiliser une pause marquée. Plus d'infos . Comme d'autres l'ont dit, pause fermera la boucle la plus proche.

Qu'en est-il en utilisant un booléen que vous appelez « trouvé » et l'utiliser comme ceci:

while(!found) {
    for(...) {
        //todo
    }
}

Je pense que vous pouvez faire une chose plus ..

for (int k = 0; k

                   k =  stationen.length + 1 ;

                }
            }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top