PętleCzęść NR.6

W C# i w Javie mamy 4 struktury pętli.

Pętli używamy by wielokrotnie wykonać kod. Podobnie jak z wyrażeniem “if” kod do wykonywania w  pętli znajduje się wewnątrz nawiasów klamrowych.

Jeśli mamy do dyspozycji tylko 1 blok kodu do wykonania, to nie musimy używać nawiasów klamrowych.

Pętla while

Pętla while wykonuje kod jeśli wyrażenie w nawiasie jest prawdziwe. Kod będzie się wykonywał, aż warunek zwróci wartość fałsz.

Poniższa pętla wyświetli liczby od 0 do 4.

int i = 0;
while (i < 5) { System.Console.Write(i++); }

Warunek pętli jest sprawdzany na początku.  Oznacza to, że jeśli warunek nie jest spełniony to nie wykona się ani razu.

Pętla do-while

Pętla do-while działa tak samo jak pętla while. Różnica jednak polega na tym, że kod wykona się przynajmniej raz. Potem jest sprawdzany warunek. Jeśli warunek jest prawdziwy, to kod wykonuje się dalej.

int i2 = 0;
do { System.Console.Write(i2++); } while (i2 < 10);

Pętla for

Pętla for jest używana, gdy znamy dokładną liczbę iteracji pętli. Składa się ona z trzech parametrów.

Pierwszy parametr tworzy zmienną i jest wykonywany tylko raz na początku pętli.

Drugie wyrażenie określa warunek wykonywania pętli. Jeśli warunek jest fałszywy pętla nie wykonuje się dalej.

Trzecie wyrażenie zwiększa wartość zmiennej o jeden.

for (int j = 0; j < 10; j++)
{
    System.Console.Write((j));
}

Pętla for ma wiele wersji. Przykładowo można w niej zadeklarować wiele parametrów po przecinku.

for (int t = 0, g = 5; t < 10; t++, g--)
{
    System.Console.Write(t +g); 
}

Istnieje też możliwość nie inkrementowania parametrów.

for (int k = 0; k < 10;) 
{
    System.Console.Write(k++); // 0-9
}

Składnie for można też uprościć do wyrażenia “while”.

int i = 0;
for (; i > 10;)
{ i++; }

Foreach

Tutaj pojawiają się różnice pomiędzy Javą a C#.

Pętla Foreach ma dać prosty sposób iterowania po kolekcjach. W tym przykładzie jest to tablica.

Iteracja sama przechodzi po elementach tablicy i przypisuje wartość obecnego elementu do zmiennej.

Gdy pętla przejdzie przez wszystkie wartości w tablicy to się zakończy.

int[] array = { 8,9,10 };

for (int element : array) 
{ 
    System.out.print(element); 
}

W C# też mamy pętle foreach. Deklaruje się ją jednak nowym słowem kluczowym.

int[] array = { 8, 9, 10 };

foreach (int element in array)
{
    System.Console.Write(element);
}

Break i continue

Istnieją dwa słowa kluczowe, które mogą być użyte wewnątrz pętli.

Słowo kluczowe break kończy całą pętle.

Słowo continue kończy daną iterację. Kod nie przechodzi dalej. Natomiast wykonuje się następna iteracja. Sprawdzenie warunku pętli i kod od początku bloku.

for (int k = 0; k < 10; k++)
{
    if (k ==5)
        break; // koniec for
    if (k == 1 || k == 4)
        continue; //następna iteracja

    System.Console.Write(k);
}

Te słowa kluczowe działają tak samo w C# i w Javie

for (int k = 0; k < 10; k++)
{
    if (k ==5)
        break; // koniec for
    if (k == 1 || k == 4)
        continue; //następna iteracja

    System.out.print(k);
}

W Javie i tylko w Javie istnieje możliwość stosowania etykiet. Gdy mamy wiele pętli możemy w ten sposób określić, którą pętlę chcemy zakończyć wyrażeniem break.

Alternatywnie w której pętli chcemy zakończyć iterację słowem continue.

mojaPentla:for (int i = 0, j = 0; i < 50; i++)
{
    while (++j < 50)
    {
        break  mojaPentla; // koniec pętli
        continue  mojaPentla; // zacznij nową iteracje
    }
}

W C# ponieważ nie ma takiego wynalazku, to albo trzeba stworzyć specjalne wyrażenie if, albo co gorsza skorzystać z wyrażenia goto.

for (int i = 0; i < 100; i++)
    {
        for (int j = 0; j < 100; j++)
        {
            goto Foo; // yeuck!
        }
    }
Foo:
    Console.WriteLine("Hi");

Alternatywnie można zaszaleć z delegatą w C#.

Action loop = delegate
{
    for (int x = 0; x < 10; x++)
    {
        for (int y = 0; y < 10; y++)
        {
            return; // wychodze z kodu
        }
    }
};
loop();