Che cos'è la parola chiave "continua" e come funziona in Java?


302

Ho visto questa parola chiave per la prima volta e mi chiedevo se qualcuno potesse spiegarmi cosa fa.

  • Qual è la continueparola chiave?
  • Come funziona?
  • Quando viene usato?

Risposte:


416

Una continuedichiarazione senza etichetta eseguire nuovamente dalla condizione più interno whileo doanello, e dall'espressione aggiornamento più interno forciclo. Viene spesso utilizzato per terminare anticipatamente l'elaborazione di un ciclo ed evitare quindi ifistruzioni profondamente annidate . Nell'esempio seguente continueverrà visualizzata la riga successiva, senza elaborare la seguente istruzione nel ciclo.

while (getNext(line)) {
  if (line.isEmpty() || line.isComment())
    continue;
  // More code here
}

Con un'etichetta, si continueeseguirà nuovamente dal ciclo con l'etichetta corrispondente, anziché il ciclo più interno. Questo può essere usato per sfuggire ad anelli profondamente annidati o semplicemente per chiarezza.

A volte continueviene anche utilizzato come segnaposto per rendere più chiaro un corpo ad anello vuoto.

for (count = 0; foo.moreData(); count++)
  continue;

La stessa istruzione senza etichetta esiste anche in C e C ++. L'equivalente in Perl è next.

Questo tipo di flusso di controllo non è raccomandato, ma se lo desideri puoi anche utilizzare continueper simulare una forma limitata di goto. Nel seguente esempio continueeseguirà nuovamente il for (;;)ciclo vuoto .

aLoopName: for (;;) {
  // ...
  while (someCondition)
  // ...
    if (otherCondition)
      continue aLoopName;

513

continueè un po 'come goto. Hai familiarità con break? Al contrario, è più facile pensarci:

  • break termina il ciclo (passa al codice sottostante).

  • continue termina il resto dell'elaborazione del codice all'interno del ciclo per l'iterazione corrente, ma continua il ciclo.


1
buon esempio per interrompere e continuare, ho pensato che fosse lo stesso prima>> <
yfsx

Impossibile non renderlo un bel perfetto 500! +1
cappello

100

Vediamo un esempio:

int sum = 0;
for(int i = 1; i <= 100 ; i++){
    if(i % 2 == 0)
         continue;
    sum += i;
}

Ciò otterrebbe la somma dei soli numeri dispari da 1 a 100.


28

Se pensi al corpo di un loop come a una subroutine, continueè un po 'come return. La stessa parola chiave esiste in C e ha lo stesso scopo. Ecco un esempio inventato:

for(int i=0; i < 10; ++i) {
  if (i % 2 == 0) {
    continue;
  }
  System.out.println(i);
}

Questo stamperà solo i numeri dispari.


16

In generale, vedo continue(e break) come un avvertimento che il codice potrebbe utilizzare alcuni refactoring, specialmente se la dichiarazione whileo forloop non è immediatamente in vista. Lo stesso vale per returnun metodo, ma per un motivo leggermente diverso.

Come altri hanno già detto, continue sposta alla successiva iterazione del ciclo, mentre si breaksposta dal ciclo di chiusura.

Possono trattarsi di bombe temporali di manutenzione perché non esiste un collegamento immediato tra continue/ breake il ciclo che sta continuando / interrompendo oltre al contesto; aggiungi un loop interno o sposta le "budella" del loop in un metodo separato e avrai un effetto nascosto di continue/break fallito.

IMHO, è meglio usarli come misura dell'ultima risorsa e quindi assicurarsi che il loro uso sia raggruppato strettamente all'inizio o alla fine del ciclo in modo che lo sviluppatore successivo possa vedere i "limiti" del ciclo in una schermata .

continue, breake return(a parte One True Return alla fine del metodo) rientrano tutti nella categoria generale di "GOTO nascosti". Mettono il loop e il controllo delle funzioni in luoghi inaspettati, che alla fine causano bug.


Sono interessato al motivo per cui il ritorno è negativo. Ho già la sensazione che il ritorno sia negativo perché Scala non incoraggia i ritorni .
Jus12,

1
D'altra parte, consentire a un metodo di tornare da un ciclo profondamente annidato potrebbe essere il modo più semplice, più leggibile e più ragionevole di fare le cose, piuttosto che creare variabili extra solo per rendere più chiara l'uscita del ciclo.
David R Tribble,

5

"continua" in Java significa andare alla fine del ciclo corrente, significa: se il compilatore vede continuare in un ciclo passerà alla successiva iterazione

Esempio: questo è un codice per stampare i numeri dispari da 1 a 10

il compilatore ignorerà il codice di stampa ogni volta che vede passare alla successiva iterazione

for (int i = 0; i < 10; i++) { 
    if (i%2 == 0) continue;    
    System.out.println(i+"");
}


4

Come già accennato continuesalterà l'elaborazione del codice sottostante e fino alla fine del ciclo. Quindi, si viene spostati nelle condizioni del loop e si esegue la successiva iterazione se questa condizione è ancora valida (o se è presente un flag, alla condizione del ciclo indicato).

Va sottolineato che nel caso in cui do - whilesi è passati alla condizione in basso dopo acontinue , non all'inizio del ciclo.

Questo è il motivo per cui molte persone non riescono a rispondere correttamente a ciò che genererà il seguente codice.

    Random r = new Random();
    Set<Integer> aSet= new HashSet<Integer>();
    int anInt;
    do {
        anInt = r.nextInt(10);
        if (anInt % 2 == 0)
            continue;
        System.out.println(anInt);
    } while (aSet.add(anInt));
    System.out.println(aSet);

* Se la tua risposta è che aSetconterrà numeri dispari solo al 100% ... ti sbagli!


4

Continua è una parola chiave in Java e viene utilizzata per saltare l'iterazione corrente.

Supponiamo di voler stampare tutti i numeri dispari da 1 a 100

public class Main {

    public static void main(String args[]) {

    //Program to print all odd numbers from 1 to 100

        for(int i=1 ; i<=100 ; i++) {
            if(i % 2 == 0) {
                continue;
            }
            System.out.println(i);
        }

    }
}

continue statement nel programma precedente salta semplicemente l'iterazione quando i è pari e stampa il valore di i quando è dispari.

L' istruzione Continue ti porta semplicemente fuori dal ciclo senza eseguire le istruzioni rimanenti all'interno del ciclo e innesca la successiva iterazione.


3

Considera una condizione If Else. Un'istruzione continue esegue ciò che è presente in una condizione e esce dalla condizione, ovvero passa alla successiva iterazione o condizione. Ma una pausa lascia il giro. Considera il seguente programma. '

public class ContinueBreak {
    public static void main(String[] args) {
        String[] table={"aa","bb","cc","dd"};
        for(String ss:table){
            if("bb".equals(ss)){
                continue;
            }
            System.out.println(ss);
            if("cc".equals(ss)){
                break;
            }
        }
        System.out.println("Out of the loop.");
    }

}

Stampa: aa cc Out of the loop.

Se usi break al posto di continue (After if.), Stamperà solo aa e uscirà dal ciclo .

Se la condizione "bb" è uguale a ss è soddisfatta: per continuare: passa all'iterazione successiva, ad esempio "cc" .equals (ss). Per Break: esce dal loop e stampa "Out of the loop".


2
Abbastanza sicuro sarebbe anche stampare cc dal "cc"! = "Bb" e la dichiarazione di stampa è prima delbreak
Ted Delezene

2

Sono un po 'in ritardo alla festa, ma ...

Vale la pena ricordare che continueè utile per loop vuoti in cui tutto il lavoro viene eseguito nell'espressione condizionale che controlla il loop. Per esempio:

while ((buffer[i++] = readChar()) >= 0)
    continue;

In questo caso, tutto il lavoro di leggere un personaggio e aggiungerlo bufferviene fatto nell'espressione che controlla il whileciclo. L' continueistruzione funge da indicatore visivo del fatto che il loop non ha bisogno di un corpo.

È un po 'più ovvio dell'equivalente:

while (...)
{ }

e decisamente migliore (e più sicuro) stile di codifica rispetto all'utilizzo di un'istruzione vuota come:

while (...)
    ;

Sono assolutamente d'accordo sul fatto che sia un codice più pulito e più leggibile, ma non sono sicuro di seguire il tuo argomento sul fatto che sia "più sicuro" dell'altra opzione, mentre (statement); delimitato direttamente utilizzando un punto e virgola.
axolotl

@Aalok - È più sicuro perché un punto e virgola solitario è facile perdere visivamente. È anche facile tralasciare accidentalmente, il che renderebbe la prossima affermazione che segue il whilediventare il corpo della whileclausola e che non sarebbe visivamente ovvio. Un esplicito continueè ovvio e trasmette l'intenzione che una dichiarazione vuota non lo fa.
David R Tribble

Capisco, quindi intendi principalmente dal punto di vista del design. Questo ha senso. Avevo qualcosa alla base del modo in cui il loop è strutturato in mente.
axolotl

1

Fondamentalmente in Java, continue è una dichiarazione. Quindi l'istruzione continue viene normalmente utilizzata con i loop per saltare l'iterazione corrente.

Per come e quando viene utilizzato in Java, fare riferimento al collegamento di seguito. Ha una spiegazione con l'esempio.

https://www.flowerbrackets.com/continue-java-example/

Spero che sia d'aiuto !!


0

continue deve essere all'interno di un loop Altrimenti mostra l'errore di seguito:

Continua fuori dal ciclo


0

L'istruzione continue viene utilizzata nella struttura di controllo del ciclo quando è necessario passare immediatamente alla successiva iterazione del ciclo.

Può essere utilizzato con for loop o while loop. L'istruzione continue di Java viene utilizzata per continuare il ciclo. Continua il flusso corrente del programma e salta il codice rimanente alla condizione specificata.

Nel caso di un loop interno, continua solo il loop interno.

Possiamo usare l'istruzione continue Java in tutti i tipi di loop come for loop, while loop e do-while loop.

per esempio

class Example{
    public static void main(String args[]){
        System.out.println("Start");
        for(int i=0; i<10; i++){
            if(i==5){continue;}
            System.out.println("i : "+i);   
        }
        System.out.println("End.");
    }
}

produzione:

Start
i : 0
i : 1
i : 2
i : 3
i : 4
i : 6
i : 7
i : 8
i : 9
End.

[il numero 5 è salta]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.