Kitört a beágyazott hurkokból

1. Áttekintés

Ebben az oktatóanyagban létrehozunk néhány példát, amelyek bemutatják a felhasználás különböző módjait szünet hurkon belül. Ezután azt is megtudhatjuk, hogyan lehet egy ciklust lezárni használat nélkül szünet egyáltalán.

2. A probléma

A beágyazott ciklusok nagyon hasznosak például a listák listáján való kereséshez.

Ilyen például a hallgatók listája, ahol minden hallgató rendelkezik a tervezett kurzusok listájával. Tegyük fel, hogy meg akarjuk találni egy tervezett személy nevét tanfolyam 0.

Először áttekintettük a hallgatók listáját. Aztán ezen a körön belül áttekintettük a tervezett tanfolyamok listáját.

Amikor kinyomtatjuk a hallgatók és tanfolyamok nevét, a következő eredményt kapjuk:

hallgató 0 tanfolyam 0 tanfolyam 1 hallgató 1 tanfolyam 0 tanfolyam 1

Meg akartuk találni az első hallgatót, aki tervezett tanfolyam 0. Ha azonban csak ciklusokat használunk, akkor az alkalmazás a pálya megtalálása után folytatja a keresést.

Miután találtunk egy személyt, aki megtervezte az adott tanfolyamot, abba akarjuk hagyni a keresést. A keresés folytatása több időt és erőforrást igényel, miközben nincs szükségünk további információkra. Ezért akarunk szakítani ki a beágyazott hurokból.

3. Törés

Az első lehetőség, amelyet ki kell választanunk egy beágyazott hurokból, az az, hogy egyszerűen használjuk a szünet nyilatkozat:

Karakterlánc eredménye = ""; for (int externalCounter = 0; externalCounter <2; externalCounter ++) {eredmény + = "külső" + externalCounter; for (int belső számoló = 0; belső számoló <2; belső számoló ++) {eredmény + = "belső" + belső számoló; if (internalCounter == 0) {törés; }}} visszatérési eredmény;

Van egy külső és egy belső hurok, mindkét hurok két iterációval rendelkezik. Ha a belső hurok számlálója megegyezik 0-val, akkor végrehajtjuk szünet parancs. Amikor a példát futtatjuk, a következő eredmény jelenik meg:

external0inner0outer1inner0

Vagy módosíthatjuk a kódot, hogy egy kicsit jobban olvasható legyen:

külső 0 belső 0 külső 1 belső 0

Ezt akarjuk?

Majdnem, a belső ciklust a break utasítás zárja lemiután 0 található. A külső hurok azonban folytatódik, amit nem akarunk. Teljesen le akarjuk állítani a feldolgozást, amint megvan a válasz.

4. Címkézett törés

Az előző példa jó irányba tett lépés volt, de egy kicsit javítanunk kell rajta. Ezt megtehetjük az a használatával feliratú törés:

Karakterlánc eredménye = ""; myBreakLabel: for (int externalCounter = 0; externalCounter <2; externalCounter ++) {eredmény + = "külső" + externalCounter; for (int belső számoló = 0; belső számoló <2; belső számoló ++) {eredmény + = "belső" + belső számoló; if (internalCounter == 0) {break myBreakLabel; }}} visszatérési eredmény;

A felcímkézve törés csak a belső hurok helyett véget vet a külső huroknak. Ezt a. Összeadásával érjük el myBreakLabel a cikluson kívül, és a törés utasítás megváltoztatásával állítsa le myBreakLabel. A példa futtatása után a következő eredményt kapjuk:

external0inner0

Kicsit jobban elolvashatjuk néhány formázással:

külső 0 belső 0

Ha megnézzük az eredményt, akkor ezt láthatjuk a belső és a külső hurok is véget ér, amit el akartunk érni.

5. Vissza

Alternatív megoldásként a Visszatérés utasítás az eredmény közvetlen visszaadásához, ha megtalálható:

Karakterlánc eredménye = ""; for (int externalCounter = 0; externalCounter <2; externalCounter ++) {eredmény + = "külső" + externalCounter; for (int belső számoló = 0; belső számoló <2; belső számoló ++) {eredmény + = "belső" + belső számoló; if (internalCounter == 0) {visszatérési eredmény; }}} return "sikertelen";

A címkét eltávolítjuk, és a szünet állítás helyébe a Visszatérés nyilatkozat.

A fenti kód végrehajtásakor ugyanazt az eredményt kapjuk, mint a címkézett törésnél. Ne feledje, hogy ennek a stratégiának a működéséhez általában a hurokblokkot a saját módszerébe kell áthelyeznünk.

6. Következtetés

Tehát csak megvizsgáltuk, mit tegyünk, amikor korán kell kilépnünk egy hurokból, például amikor megtaláltuk a keresett elemet. A szünet kulcsszó hasznos az egyhuroknál, és használhatjuk felcímkézve szünets beágyazott hurkok esetén.

Alternatív megoldásként használhatjuk a Visszatérés nyilatkozat. A return használata a kódot jobban olvashatóvá és kevésbé hibára hajlamossá teszi, mivel nem kell gondolkodnunk a felirat nélküli és a címkézett törések közötti különbségen.

Nézze meg nyugodtan a kódot a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found