package p04_instrukcje;

public class PetleTeoria {

    public static void petlaWhile() {
        int i = 1;
        while(i <= 5) {
            System.out.println("w pętli: " + i);
            i++;
        }
        System.out.println("za pętlą: " + i);
    }

    public static void doWhile() {
        int i = 1;
        do {
            System.out.println("w pętli: " + i);
            i++;
        } while(i <= 5);
        System.out.println("za pętlą: " + i);
    }

    // ominięte w main
    public static void petlaFor() {
        for(int i = 1; i <= 5; i++) {
            System.out.println("w pętli " + i);
        }

        // NK System.out.println("za pętlą: " + i);
        int i; // OK
    }

    public static void petlaFor2() {
        int i;

        for(i = 1; i <= 5; i++) {
            System.out.println("w pętli " + i);
        }

        System.out.println("za pętlą: " + i); // 6
        // NK int i;
    }

    // ominięte w main
    public static void petlaFor3() {
        // int i;

        for(int i = 1, j = 10; i <= 5 && j < 3; i++, j = i / 10, System.out.println("z pętli " + j)) {
            System.out.println("w pętli " + i);
        }

        // System.out.println("za pętlą: " + i);
    }

    // ominięte w main
    // w for moga byc dowolne instrukcje
    public static void petlaFor4(org.w3c.dom.Node node) {
        for(org.w3c.dom.Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) {
            System.out.println(child.getTextContent());
        }
    }

    public static void losowanie() {
        for(;;) {
            double x = Math.random();
            System.out.println("Wylosowałem " + x);
            if(x > 0.8)
                break;
        }
        System.out.println("za pętlą");
    }

    public static void forEach() {
        String[] imiona = { "Ala", "Ola", "Ela", "Ula" };

        // pozwala przeglądać zawartość tablicy, albo obiekty, które są Iterable 
        // tzw. "for-each" albo "enhanced for loop", od Javy 5
        for(String imie: imiona) {
            System.out.println("Kolejna osoba to " + imie);
        }

        // Od Javy 10 można tak:
        //		for(var imie : imiona) {
        //			System.out.println("Kolejna osoba to " + imie);
        //		}
    }

    public static void forEachEgzamin() {
        // typowa zmyłka z egzaminu
        int[] t = { 1, 2, 3 };
        for(int i: t) {
            // i oznacza WARTOŚĆ z tablicy, a nie indeks
            // więc tu dojdzie do wyjścia poza zakres tablicy
            System.out.println(t[i]);
        }
    }

    public static void przerwanie() {
        for(int i = 1; i <= 10; i++) {
            System.out.println("i = " + i);
            if(i % 2 == 1) {
                System.out.println("  nieparzysta, continue");
                continue;
            }
            System.out.println("  nie było continue");
            if(i % 3 == 0) {
                System.out.println("  podzielna przed 3, break");
                break;
            }
            System.out.println("  nie było break");
        }
        System.out.println("za pętlą");
    }

    public static int etykiety() {
        int suma = 0;
        duza: while(true) {
            for(int i = 1; i < 10; i++) {
                suma += i;
                if(suma > 100)
                    break duza;
            }
        }
        return suma;
    }

    public static void main(String[] args) {
        etykieta: // kompiluje się, ale nie ma jak tego użyć
        System.out.println("while");
        petlaWhile();

        //NK goto etykieta;

        System.out.println("\ndo-while");
        doWhile();

        System.out.println("\nfor");
        petlaFor2();

        System.out.println("\nLosowanie:");
        losowanie();

        System.out.println("\nfor-each");
        forEach();

        System.out.println();
        przerwanie();

        System.out.println();

        int x = etykiety();
        System.out.println(x);
    }
}
