Domanda

  

Eventuali duplicati:
   Come pausa dal ciclo principale / esterno in un ciclo doppia / annidato?

Ho la seguente situazione:

      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;
                    }
                }
            }
        }

Voglio

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

essere eseguita una sola volta e poi rompere fuori dal ciclo interno e continuare con il for (int i ... loop. Così ho usato una pausa nel mio codice. Ma io non sono veramente sicuro se questo è giusto. Fa la pausa causare una pausa per tutti i loop o solo per il secondo ciclo?

È stato utile?

Soluzione

Si rompe solo il ciclo interno, e fa quindi ciò che si desidera. Per rompere più di un livello, in Java, è possibile utilizzare una "pausa etichetta" in questo modo:

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;
        }
    }
}

Ma di solito non avrete bisogno di questo.

Si può considerare la possibilità di un metodo separato per il ciclo interno in ogni caso; E 'qualcosa che si può facilmente dare un nome a ( "find_available_station" o qualcosa di simile), e probabilmente bisogno di qualche altra parte.

Inoltre, si prega di essere consapevole del fatto che i loop in questo momento mancherà l'ultimo elemento di ciascun array. Riflettere attentamente sul perché si sta utilizzando esclusi a quello specificato.

Altri suggerimenti

break romperà il ciclo più interno, nel tuo caso 2 ° ciclo.

Per rendere rompere il ciclo esterno è possibile utilizzare una pausa etichettato come:

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

break rompe solo ciclo più interno.

rottura causerà pausa per ciclo vicini solo (secondo occhiello)

Proprio la seconda. È possibile utilizzare "goto", naturalmente.

dichiarazione break termina il ciclo racchiude più vicino o un'istruzione switch in cui appare in molte lingue, ma si può provare ed essere sicuri al 100%.

inserisce i due anelli interni in un ritorno funzione e l'utilizzo di uscire di entrambi.

Se avete bisogno di un maggiore controllo, è possibile utilizzare una pausa etichettati. Maggiori informazioni qui . Come altri hanno detto, pausa chiuderà l'anello più vicino.

Cosa succede ad usare un valore booleano che chiamate 'trovato' e usarlo in questo modo:

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

I Think You Can Do One More Thing ..

for (int k = 0; k

                   k =  stationen.length + 1 ;

                }
            }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top