“Continue” anahtar kelimesi nedir ve Java'da nasıl çalışır?


302

Bu anahtar kelimeyi ilk kez gördüm ve birisinin bana ne yaptığını açıklayabileceğini merak ediyordum.

  • Nedir continuekelime?
  • O nasıl çalışır?
  • Ne zaman kullanılır?

Yanıtlar:


416

Bir continuebir etiket olmadan deyimi koşulu içteki dan yeniden çalıştırır whileveya dodöngü ve en içteki güncelleme ifadeden fordöngü. Genellikle bir döngünün işlenmesini erken sonlandırmak ve böylece derin iç içe ififadelerden kaçınmak için kullanılır . Aşağıdaki örnekte continue, döngüde aşağıdaki ifadeyi işlemeden bir sonraki satır elde edilecektir.

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

Bir etiketle, continueen içteki döngü yerine karşılık gelen etiketle döngüden yeniden yürütülür. Bu, derin yuvalanmış döngülerden kaçmak için ya da sadece netlik için kullanılabilir.

Bazen continueboş bir döngü gövdesini daha net hale getirmek için yer tutucu olarak da kullanılır.

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

Etiketi olmayan aynı ifade C ve C ++ 'da da mevcuttur. Perl'deki karşılığı next.

Bu tür bir kontrol akışı önerilmemektedir, ancak bunu seçerseniz continuesınırlı bir biçimini simüle etmek için de kullanabilirsiniz goto. Aşağıdaki örnekte continue, boş for (;;)döngü yeniden yürütülecektir .

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

513

continuebiraz benziyor goto. Aşina mısın break? Aksine onları düşünmek daha kolaydır:

  • break döngüyü sonlandırır (altındaki koda atlar).

  • continue geçerli yineleme için döngü içindeki kodun geri kalanını sonlandırır, ancak döngüye devam eder.


1
mola ve devam için iyi bir örnek, daha önce aynı olduğunu düşündüm. <
yfsx

Güzel bir mükemmel 500 yapmamak imkansız! +1
şapka

100

Bir örnek görelim:

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

Bu, 1'den 100'e kadar sadece tek sayıların toplamını alır.


28

Bir döngünün gövdesini altyordam olarak düşünüyorsanız, continuebir çeşit gibidir return. Aynı anahtar kelime C'de bulunur ve aynı amaca hizmet eder. İşte örnek bir örnek:

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

Bu yalnızca tek sayıları yazdırır.


16

Genellikle, bkz continue(ve breakkod bir uyarı olarak) olabilir , özellikle bazı üstlenmeden kullanmak whileveya fordöngü beyan görünürde hemen değil. Aynı şey return, bir yöntemin ortasında da geçerlidir , ancak biraz farklı bir nedenden dolayı.

Diğerlerinin söylediği gibi, continuedöngüden sonraki yinelemeye giderken break, kapalı döngüden dışarı çıkar.

Bunlar bakım timebombs olabilir çünkü continue/ breakve devam ettiği / koptuğu döngü arasında bağlam dışında anında bir bağlantı yoktur ; bir iç döngü ekleyin veya döngünün "cesaretlerini" ayrı bir yönteme taşıyın ve continue/ breakfail üzerinde gizli bir etkiye sahipsiniz .

IMHO, en son çare ölçüsü olarak kullanmak ve daha sonra kullanımlarının döngünün başında veya sonunda sıkı bir şekilde gruplandığından emin olmak için en iyisidir, böylece bir sonraki geliştirici döngüdeki "sınırları" bir ekranda görebilir .

continue,, breakve return(yönteminizin sonundaki Tek Gerçek Dönüş dışında) genel "gizli GOTO'lar" kategorisine girer. Döngü ve işlev kontrolünü beklenmedik yerlere yerleştirirler, bu da sonunda hatalara neden olur.


Geri dönüşün kötü olmasının nedeni ile ilgileniyorum. Zaten geri dönüşün kötü olduğunu hissediyorum çünkü Scala geri dönüşleri teşvik etmiyor .
Jus12

1
Öte yandan, bir yöntemin derin yuvalanmış bir döngüden geri dönmesine izin vermek, döngü çıkışının daha temiz görünmesini sağlamak için ekstra değişkenler oluşturmak yerine, işleri yapmanın en kolay, en okunaklı ve en makul yolu olabilir.
David R Tribble

5

Java'da "devam et", geçerli döngünün sonuna gitmek anlamına gelir, şu anlama gelir: derleyici bir döngüde devam ederse bir sonraki yinelemeye gider

Örnek: Bu, 1'den 10'a kadar tek sayıları yazdırmak için kullanılan bir koddur

derleyici bir sonraki yinelemeye geçmeye devam ettiğinde baskı kodunu yok sayar

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


4

Daha önce de belirtildiği gibi continue, altındaki kodu ve döngünün sonuna kadar işlemeyi atlayacaktır. Daha sonra, döngünün durumuna taşınır ve bu koşul hala geçerliyse (veya bir işaret varsa, belirtilen döngünün durumuna) sonraki yinelemeyi çalıştırırsınız.

Vurgulanması gerekir ki, durumda do - whilea'nın arkasından continuedeğil , alttan başlayarak koşula başında değil.

Bu yüzden birçok insan aşağıdaki kodun ne üreteceğini doğru bir şekilde cevaplayamıyor.

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

* Cevabınız aSetsadece% 100 tek sayıları içeriyorsa ... yanılıyorsunuz!


4

Devam , Java'daki bir anahtar kelimedir ve geçerli yinelemeyi atlamak için kullanılır.

1 ile 100 arasındaki tüm tek sayıları yazdırmak istediğinizi varsayalım

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

    }
}

Devam Yukarıdaki programda açıklama basitçe yinelemeyi atlar i bile olup değerini yazdırır i garip olduğunda.

Continue deyimi, döngü içinde kalan deyimleri çalıştırmadan sizi döngüden çıkarır ve sonraki yinelemeyi tetikler.


3

Başka bir Durum koşulunu düşünün. Devam ifadesi, bir koşulda olanı yürütür ve koşuldan çıkar, yani bir sonraki yinelemeye veya koşula atlar. Ancak bir Mola döngüden çıkar. Aşağıdaki Programı düşünün. '

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.");
    }

}

Yazdırılacak: aa cc Döngü dışında.

Eğer devam etmek yerine mola kullanırsanız (Sonra ise), aa'yı yazdırır ve döngüden çıkarır .

"Bb" koşulu ss'ye eşitse: Devam için: Sonraki yinelemeye gider, yani "cc" .equals (ss). Break için: Döngüden çıkar ve "Döngüden" yazdırır.


2
"Cc"! = " break
Bb

2

Partiye biraz geç kaldım ama ...

continueDöngüyü kontrol eden koşullu ifadede tüm işlerin yapıldığı boş döngüler için yararlı olduğunu belirtmek gerekir . Örneğin:

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

Bu durumda, bir karakteri okuma ve ekleme bufferişlemi, whiledöngüyü kontrol eden ifadede yapılır . continueDeyimi döngü bir bedene ihtiyacı olmadığını görsel göstergesi olarak hizmet vermektedir.

Eşdeğerden biraz daha açık:

while (...)
{ }

ve kesinlikle aşağıdaki gibi boş bir ifade kullanmaktan daha iyi (ve daha güvenli) kodlama stili:

while (...)
    ;

Kesinlikle daha temiz ve daha okunabilir bir kod olduğunu kabul ediyorum, ama diğer seçeneğe göre "daha güvenli" olma argümanı takip emin değilim, (ifade); noktalı virgül kullanılarak doğrudan sınırlandırılır.
axolotl

@Aalok - Yalnız bir noktalı virgülün görsel olarak kaçırılması kolay olduğundan daha güvenlidir. Yanlışlıkla dışarıda bırakmak da kolaydır, bu whileda whilecümlenin gövdesi haline geldikten sonraki bir sonraki ifadeyi yapar ve görsel olarak açık olmaz. Müstehcen bir continueşey açıktır ve boş bir ifadenin yapmadığı bir niyeti ifade eder.
David R Tribble

Anlıyorum, yani esas olarak bir tasarım perspektifinden geliyorsun. Mantıklı. Döngünün akılda yapılandırılma biçiminin altında yatan bir şey vardı.
axolotl

1

Temelde java'da devam ifadesidir. Dolayısıyla, devam ifadesi normalde geçerli yinelemeyi atlamak için döngülerle birlikte kullanılır.

Java'da nasıl ve ne zaman kullanıldığını öğrenmek için aşağıdaki bağlantıya bakın. Örnekle açıklaması var.

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

Umarım yardımcı olur !!


0

continue bir döngü içinde olmalıdır Aksi takdirde aşağıdaki hatayı gösterir:

Döngü dışında devam et


0

Devam ifadesi, döngünün bir sonraki yinelemesine hemen atlamanız gerektiğinde döngü kontrol yapısında kullanılır.

Döngü için veya while döngüsü için kullanılabilir. Java devam ifadesi döngüye devam etmek için kullanılır. Programın geçerli akışına devam eder ve kalan kodu belirtilen koşulda atlar.

Bir iç döngü durumunda, sadece iç döngüye devam eder.

Java continue ifadesini for döngüsü, while döngüsü ve do-while döngüsü gibi tüm döngü türlerinde kullanabiliriz.

Örneğin

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.");
    }
}

çıktı:

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

[5 sayısı atlanıyor]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.