package gotowe.p02_zmienne;

public class A_TeoriaZmiennych {

    public static void main(String[] args) {
        System.out.println("Początek programu");

        // Aby użyć zmiennej, trzeba ją zadeklarować.
        //NK x = 15;
        //NK System.out.println(x);

        // Deklaracja zmiennej:
        String txt;
        int x, innaZmienna;

        // Zmienne lokalne (czyli deklarowane wewnątrz metod)
        // nie są automatycznie inicjowane na żadną wartość.
        // Niezainicjowanych zmiennych lokalnych nie wolno odczytywać (błąd kompilacji).

        //NK System.out.println(txt);
        //NK System.out.println(x);
        //NK x = 2 * x;
        //NK x += 5;

        // Instrukcja przypisania (assignment)
        txt = "Ala";
        x = 25;

        System.out.println(x); // OK
        System.out.println(txt); // OK

        // ponowne przypisanie = zmiana wartości zmiennej

        txt = "Ola";
        x = x + 1;
        System.out.println(x);

        // Rozszerzone operatory przypisania:
        x += 4; // równoważne x = x + 4
        System.out.println(x);
        // dostępne także dla innych operatorów
        x *= 2;
        System.out.println(x);
        System.out.println();

        // Zazwyczaj wartość zmiennej podaje się od razu w miejscu deklaracji (deklaracja z inicjalizacją):
        int y = 100, z = 200;
        String miasto = "Warszawa";

        System.out.println(y + z);
        System.out.println(miasto);

        // Typowe podejście Javy:
        // Zmienne lokalne deklaruje się dopiero kiedy są potrzebne
        // i od razu podaje się ich początkową wartość.
    }

}
