Powrót do C#

pętla while, do-while

Były już instrukcje, przyszedł teraz czas na pętle. Pętle różnią się od instrukcji tym, że instrukcje sprawdzają warunek i podejmują działanie, pętle działają jeśli warunek jest spełniony spełniony, opuszczamy pętle dopiero gdy warunek nie zostanie spełniony. Omówimy sobie pętle while… i pętle do…while… .

 
            // pętla do-while
            do
            {
                działeanie jeśli warunek
                jest spełniony
                (warunek == true);
            } while (warunek);
            // Następne instrukcje programu.
 
            // pętla while
            while (warunek)
            {
                działeanie jeśli warunek
                jest spełniony
                (warunek == true);
            }
            // Następne instrukcje programu.

Podstawowa różnica jest taka, że do-while, najpierw wykonuje instrukcję, a potem sprawdza warunek, natomiast while najpierw sprawdza warunek, następnie wykonuje instrukcję (jeśli jest spełniony).

            int x = 1;
            string str = "teskt";

            do
            {
                Console.WriteLine(str);
            } while (x == 0);


            while (x == 0)
            {
                Console.WriteLine(str);
            }
            //Wyświetli
            //tekst

W powyższym kodzie warunkiem jest (x == 0), w pierwszej pętli, najpierw wyświetlony jest tekst, a następnie sprawdzany warunek (1 == 0), który jest fałszywy, powoduje to wyjście z pętli. W drugiej pętli najpierw sprawdzany jest warunek (1 == 0) który jest fałszywy, więc instrukcja nie jest wykonana, a konsekwencją jest wyjście z pętli. W pętlach szeroko wykorzystywane są operatory przyrostów. Automatycznie zwiększają wartość zmiennej warunku:

            int x = 0;

            Console.WriteLine("Pętla while...");
            while (x <= 4)
            {
                Console.WriteLine(x);
                x++; // to samo co x=x+1
            }

            Console.WriteLine("Pętla do...while...");
            do
            {
                x--; // to samo co x=x-1
                Console.WriteLine(x);
            } while (x >= 1);

            //Wyświetli:
            //Pętla while...
            //0
            //1
            //2
            //3
            //4
            //Pętla do...while...
            //4
            //3
            //2
            //1
            //0

Taki zabieg powoduje kontynuowanie pętli do momentu spełnienia warunku. Niestety zła konstrukcja warunku, może spowodować zapętlenie, nasza pętla nie zostanie nigdy opuszczona i program będzie powtarzał instrukcję do momentu wyłączenia programu. Pętle można opuścić, również wykorzystując słowo klucz „break”.

            int x = 0;

            Console.WriteLine("Pętla while...");
            while (true)
            {
                Console.WriteLine(x);
                x++; // to samo co x=x+1
                if (x == 5) break;
            }

            Console.WriteLine("Pętla do...while...");
            do
            {
                x--; // to samo co x=x+1
                Console.WriteLine(x);
                if (x == 0) break;
            } while (true);

            //Wyświetli
            //Pętla while...
            //0
            //1
            //2
            //3
            //4
            //Pętla do...while...
            //4
            //3
            //2
            //1
            //0

Pętla działa identycznie jak poprzednia, warunek „} while (true);” gwarantuje, że zawsze będzie spełniony. Momentem wyjścia z pętli jest spełnienie warunku instrukcji if (if (x == 0) break;) i użycie klucza break do jej zatrzymania i wyjścia. Do wyjścia z pętli możemy również wykorzystać skok i etykietę:

            int x = 0;

            Console.WriteLine("Pętla while...");
            while (true)
            {
                Console.WriteLine(x);
                x++; // to samo co x=x+1
                if (x == 5) goto EndWhile;
            } EndWhile:;

            Console.WriteLine("Pętla do...while...");
            do
            {
                x--; // to samo co x=x+1
                Console.WriteLine(x);
                if (x == 0) goto EndDoWhile;
            } while (true);
            EndDoWhile:;

            //Wyświetli
            //Pętla while...
            //0
            //1
            //2
            //3
            //4
            //Pętla do...while...
            //4
            //3
            //2
            //1
            //0

Efekt będzie identyczny, zalecam jednak, abyście korzystali z pierwszej metody konstrukcji pętli. Nie każdy język programowania wykorzystuje „goto” i nie każdy musi korzystać z etykiet, ale pętle do..while… i while…do… zawiera każdy język programowania. Dlatego warto, jest tak konstruować warunki, aby nie wyskakiwać z pędzącej pętli (jeśli się da). Poniższy kod zmusza użytkownika do wpisania imienia:

            Console.WriteLine("Jak masz na imię?");
            string imie;
            do
            {
                imie = Console.ReadLine();
                if (imie.Length == 0)
                {
                    Console.WriteLine("Nic nie wpisałeś, postaraj się.");
                }
            } while (imie.Length == 0 );

            Console.WriteLine("Witaj "+ imie);

Powyższy kod powtarza się ,dopóki użytkownik czegoś nie wpisze, niekoniecznie musi to być imię, ponieważ sprawdzenie, czy jest to imię, wymagałoby połączenia większej ilości instrukcji sprawdzających wpisany tekst.


 

 

 

Permalink do tego artykułu: https://visualmonsters.cba.pl/c/petla-while-do-while/