Cześć i witaj. W tym wykładzie chcę mówić o zagnieżdżonych pętlach i sterowaniu pętlami.
Zagnieżdżone pętle, pętle wewnątrz pętli, kontrola pętli ma do czynienia z
instrukcjami break i continue.
Więc zagnieżdżone pętle.
Są chwile, kiedy chcesz umieścić jedną pętlę wewnątrz innej pętli.
To ma sens.
Na przykład
możesz chcieć policzyć liczbę mieszkańców każdego domu na ulicy.
Więc co byś zrobił, to miałbyś zewnętrzną pętlę, przez którą przechodzisz od domu do domu.
A potem każdy dom, w którym się znajdujesz, liczyłbyś liczbę osób.
Mam więc nadzieję, że potrafisz sobie wyobrazić lub zrozumieć, w jaki sposób może to być zagnieżdżona pętla.
Znowu zewnętrzna pętla przechodzi przez wszystkie domy.
A potem dla każdej iteracji zewnętrznej pętli każdego napotkanego domu wchodzisz do
domu i masz pętlę, aby policzyć wszystkie osoby.
To taki mały przypadek użycia, gdy chcesz faktycznie wykorzystać
zagnieżdżoną pętlę w c.
Oto przykład. Wygląda tak, jak myślisz,
że pętla wewnątrz pętli nie jest zbyt skomplikowana.
W tym przykładzie używamy pętli for dla.
Pętle są fajne, ponieważ możemy zainicjować zmienną kontrolną
pętli, sprawdzić stan i zmienną kontrolną pętli modyfikacji w jednym wierszu.
Więc tę zewnętrzną pętlę i nazywaj ją zewnętrzną wewnętrzną pętlą.
Pętla zewnętrzna jest dokładnie tym, co sugeruje. To pętla na zewnątrz.
Możesz mieć wiele, wiele różnych warstw zagnieżdżenia. Możesz mieć wiele
wewnętrznych pętli.
W tym przypadku przechodzimy przez i jest
to pętla kontrolowana przez licznik, zaczynamy od jednego i idziemy do końca, aby liczyć.
Nie wiemy, co tu jest hrabia, to nie ma znaczenia.
W treści pętli for mówimy, że suma równa się 0. Inicjalizujemy sumę dla pętli wewnętrznej.
A potem wewnątrz wewnętrznej pętli widzimy kolejną pętlę for i j równa się 1, j jest
mniejsze niż równe I oraz plus dodać j. Następnie mówimy, że suma plus równa się j.
Obliczamy sumę liczb całkowitych od 1 do I.
Więc to, co tak naprawdę robi, to wpisywanie liczby 5.
W pierwszej iteracji pętli sumujesz 1
2 3 4 i 5.
W następnej iteracji pętli
sumujesz 2 3 4 5.
W trzeciej iteracji pętli sumujesz 3 4 5 i tak dalej.
Tak więc wewnętrzne pętle są niezbędne, szczególnie w oparciu o przypadek użycia, po
prostu idealnie pętla wewnątrz pętli.
Zobaczysz to całkiem sporo.
Nie bój się tego. W zależności od tego, co musisz zrobić i jaki problem
próbujesz rozwiązać, często jest używany.
I do tego momentu nie zawsze jest to pętla for wewnątrz pętli for, możesz
mieć pętlę while wewnątrz pętli for. Możesz zrobić while pętla wewnątrz pętli for, to
nie ma znaczenia.
Tak więc w
tym przykładzie, tym samym dokładnym przykładzie, z wyjątkiem tego, że teraz znajduje się
w treści pętli for, mamy zagnieżdżoną pętlę, wewnętrzną pętlę wywoływaną przy użyciu słowa kluczowego while.
Więc nadal obliczamy niektóre liczby całkowite od 1 do I.
Mamy trochę inicjalizacji poza pętlą while.
Mamy warunek wewnątrz while check, a
nasze sumy znajdują się w treści pętli while, w
której jesteśmy zmodyfikowani, jest to zmienna kontrolna pętli, którą modyfikujemy.
Czyli suma plus równa się, a następnie modyfikujemy zmienną sterującą pętli za pomocą plus plus j.
Więc gdybyśmy nie zmodyfikowali plus plus j, mielibyśmy nieskończoną pętlę dla pętli while.
Ale robi to samo wyjście, po prostu używa pętli while jako pętli zagnieżdżonej zamiast pętli for.
Więc zagnieżdżanie tak naprawdę nie różni się od tego, kiedy cokolwiek zagnieżdżasz.
Zagnieżdżono instrukcje if, instrukcje if w instrukcjach if, instrukcje
pętli zagnieżdżonych są pętlami wewnątrz pętli.
Aby odejść od koncepcji
zagnieżdżonych pętli, porozmawiajmy o instrukcji continue.
Aż do tego momentu, kiedy mówiliśmy o
pętlach, zawsze wykonywaliśmy pętlę kilka razy w oparciu o warunek wyjścia,
wyrażenie boolowskie, którego wynikiem jest fałsz.
Jednak są chwile, kiedy chcesz konkretnie zakończyć pętlę wcześniej lub
chcesz kontynuować kolejną iterację pętli
bez robienia czegokolwiek.
W tym drugim przypadku kontynuując bez robienia
czegokolwiek, pomijając zasadniczo, możesz
użyć instrukcji continue, aby to zrobić.
Zatem instrukcja continue w treści pętli wykonuje następujące czynności.
Przede wszystkim, jeśli chcesz to zainicjować, wszystko, co musisz zrobić, to umieścić słowo kluczowe
continue, po którym następuje średnik w treści pętli.
Ale to, co zrobi, to w zasadzie
pominie tę iterację. Więc kontynuuj wszystko poniżej
kontynuacji nie zostanie wykonane, jeśli znajduje się wewnątrz treści pętli.
Kontynuuj więc wiele razy, gdy będziemy chcieli znaleźć się na szczycie pętli w
oparciu o jakiś warunek, zwykle jest on opakowany w instrukcję if.
Jeśli zdarzy się to w szczególnej sytuacji, nie chcę wykonywać
żadnego kodu w treści pętli, po prostu
pomiń tę jedną iterację i sprawdź następnym razem.
I znowu, jest to trochę zagmatwane, ponieważ pomijasz iterację i skaczesz, ale jest
to poprawne i jest sposobem na wielokrotne sprawdzanie.
Więc nawet jeśli masz warunek wyjścia pętli wewnątrz wyrażenia boolowskiego,
możesz przeprowadzić kolejne sprawdzenie.
I to sprawdzenie nie wyskoczy z pętli,
ale pominie iterację.
Jest więc używany ponownie w przypadku, gdy chcesz pominąć iterację. Zaletą tego jest to, że
możesz użyć kontynuacji i wyeliminuje to wiele zagnieżdżeń.
Pozwoli to również wyeliminować wiele dodatkowych instrukcji if wewnątrz bloku pętli.
Może więc poprawić czytelność, gdy
instrukcje są bardzo długie lub masz głębokie zagnieżdżenie.
Więc jeśli okaże się, że wykonujesz dużo zagnieżdżania.
możesz powiedzieć huh, może mogę zamiast tego użyć kontynuacji.
Lub jeśli okaże się, że masz wiele
instrukcji if, które wykonują określone czynności w treści pętli, być może chcesz kontynuować.
Nie używaj kontynuacji, jeśli to komplikuje, a nie upraszcza kod.
Nie używaj kontynuacji, jeśli nie wiesz, co robisz.
Oto przykład kontynuacji.
W tym przykładzie tworzymy nowe wyliczenie dnia i
mówimy, że prawidłowe wartości to poniedziałek wtorek środa czwartek piątek sobota niedziela.
Następnie mamy pętlę for, w której inicjalizujemy wyliczenie na
poniedziałek i mówimy, że dopóki
dzień jest mniejszy niż niedziela, jest to warunek
wyjścia, a następnie mówimy plus plus dzień.
Możesz zadać sobie pytanie, w jaki sposób zwiększamy wyliczenie?
Cóż, pamiętaj, że wyliczenie pod maską to liczba całkowita.
Możesz więc powiedzieć plus plus dzień na wyliczeniu, a to po prostu zwiększy go do następnego.
Pamiętaj, poniedziałek równa się 0, wtorek równa się 1, środa
równa się 2, to wszystko w kolejności na liście.
Tak więc idealnie nadaje się do inkrementacji wyliczeń.
W tej pętli for, jeśli jest środa,
chcemy pominąć. Nie chcemy nic robić. Nie chcemy drukować.
Więc mówimy kontynuuj. Jeśli dzień jest równy
środy, kontynuuj. Pominie linię drukowania. Wróci na początek
pętli i wykona następną iterację.
A więc będzie czwartek.
To nie będzie równe środy, więc nie przeskoczy.
Zejdzie na dół i wydrukuje, że to nie środa.
Jest to więc typowy przypadek użycia, typowy przykład użycia continue, bardzo łatwej w użyciu składni, po prostu prostym
słowem kluczowym, po którym następuje średnik.
Innym przypadkiem, w którym możesz chcieć zrobić coś dziwnego w
pętli, jest wyjście wcześniej.
Tak więc normalnie po wprowadzeniu treści
pętli program wykona wszystkie instrukcje w treści pętli i
dla każdej iteracji, a następnie sprawdzi i wyskoczy.
Wiemy, jak działa kontynuacja, czyli trochę inne przeskakiwanie.
Istnieje inna instrukcja, która może zmienić wykonanie wszystkich instrukcji w pętli,
nazywa się przerwaniem.
Powinno to być trochę znajome, ponieważ używamy słowa kluczowego break, kiedy mówiliśmy o
instrukcji switch.
Pamiętaj, kiedy mieliśmy nasze sprawy, w ten sposób wyłamywaliśmy się ze spraw.
Cóż, możesz również użyć słowa kluczowego break wewnątrz pętli.
To po prostu wyskoczy z pętli.
Zatem instrukcja break spowoduje natychmiastowe wyjście programu z pętli, którą wykonuje.
Instrukcje w pętli są pomijane, a wykonanie pętli jest przerywane.
Więc po prostu wyskakujesz z pętli.
Wykonujesz wcześnie. Jeśli instrukcja break znajduje się wewnątrz zagnieżdżonych pętli, wpłynie to tylko
na najbardziej wewnętrzną pętlę, która ją zawiera. Wyskoczysz tylko z pętli, w której się znajdujesz.
Aby to zrobić, użyj słowa kluczowego break, po którym następuje średnik.
Przerwa jest często używana do opuszczenia pętli, gdy istnieją 2 oddzielne powody, aby odejść.
Więc wcześniej wspomniałem, że możesz mieć inny powód, dla którego chcesz pominąć
iterację, ale jeśli istnieją 2 powody, 2 warunki, w których chcesz wyskoczyć z pętli,
możesz użyć przerwy.
Jeśli masz tylko
jeden warunek, to jest to tylko warunek, wewnątrz samej pętli, wewnątrz
nawiasów while lub przed drugim średnikiem w pętli for.
Break jest również używany w instrukcjach switch, jak wspomniałem.
Więc chciałem ci tylko przypomnieć. Nie daj się zmylić.
Jednak zasadniczo robią to samo. Wyskakują z kodu.
Przerwanie instrukcji switch spowoduje całkowite wyskoczenie
z tej instrukcji switch, a przerwanie pętli wyskoczy z tej pętli.
Oto przykład. Mamy pętlę while.
Drukujemy kilka liczb całkowitych.
Czytamy w niektórych liczbach całkowitych. Mamy zagnieżdżoną pętlę while.
Wewnątrz zagnieżdżonej pętli while sprawdzamy,
co zostało wprowadzone. A jeśli jest większy niż
100, chcemy wyskoczyć z tej wewnętrznej pętli. Więc robimy.
Następnie w pętli zewnętrznej musimy jeszcze raz sprawdzić. Jeśli jest większy niż 100, wyrwamy się
z tej zewnętrznej pętli.
Gdybyś nie miał drugiej przerwy, nigdy nie wyskoczyłbyś z drugiej zewnętrznej pętli.
W tym przypadku przypomina mi to miejsce, do którego można by się udać.
Wyobraź sobie, że masz 5 zagnieżdżeń, 5 warstw zagnieżdżenia, podczas gdy pętla jest wewnątrz
pętli while wewnątrz pętli while wewnątrz pętli while wewnątrz pętli while.
Gdybyś po prostu użył breaka do wyskoczenia z
pętli, miałbyś wszystkie te instrukcje if w każdej pętli do wyskoczenia.
Zamiast robić te wszystkie instrukcje
if, możesz spróbować. Polecenie go to wyskoczyłoby ze wszystkich pętli stanu pętli w jednym poleceniu.
Więc to jest przypadek użycia, aby przejść do. Ale w tym przypadku pokazujemy
tylko przerwy i upewnij się, że rozumiesz, że właśnie
wyrywasz się z pętli, w której jesteś.
W tym przypadku wychodzimy z 2 pętli.
Więc to są dwa przykłady, dwa słowa kluczowe, w których zasadniczo nie możesz powtórzyć kodu tego,
czego się od niego spodziewasz.
Więc jeśli kiedykolwiek zobaczysz przerwę lub kontynuujesz w pętli, upewnij
się, że rozumiesz, co się dzieje,
ponieważ możesz nie wykonywać określonego kodu, który Twoim zdaniem zostanie wykonany.
Ponownie, zwykle zawinięty w warunek if. Możesz więc spojrzeć na
to w ten sposób, ale chcesz również zapewnić dobre komentarze, gdy używasz przerwy lub kontynuujesz.
Mam nadzieję że to pomoże. W następnym wykładzie podejmiemy wyzwanie,
w którym będziemy w stanie wykorzystać te pętle,
a to zademonstruje i pomoże ci nauczyć się wszystkiego o while dla pętli i przerwania
i kontynuowania. Dziękuję Ci.