To jest jeden z artykułów w ramach darmowego kursu programowania w Javie. Proszę zapoznaj się z pozostałymi częściami, mogą one być pomocne w zrozumieniu materiału z tego artykułu.

Operatory logiczne

Zanim przejdę do opisania instrukcji warunkowych przeczytasz coś więcej na temat operatorów logicznych.

< jest operatorem logicznym, który znasz z poprzednich artykułów. W Javie istnieje kilka operatorów logicznych:

  • == równe,
  • < mniejsze,
  • <= mniejsze bądź równe,
  • > większe,
  • >= większe bądź równe

Ich działanie możesz zobaczyć na kilku przykładach poniżej:

int x = 1;
int y = 1;
int z = 2;
 
x == y; // true
x == z; // false
x < y; // false
x < z; // true
x <= y; // true
// itd.

Proste operacje logiczne możesz ze sobą łączyć przy pomocy dodatkowych operatorów:

  • && logiczne i,
  • || logiczne lub.

Pomocna przy tym może być następująca tabelka. Pokazuje ona podstawowe operacje logiczne1.

Operacja Wynik
prawda i prawda prawda
prawda i fałsz fałsz
fałsz i prawda fałsz
fałsz i fałsz fałsz
prawda lub prawda prawda
prawda lub fałsz prawda
fałsz lub prawda prawda
fałsz lub fałsz fałsz

Przekładając kilka powyższych linii na przykłady ze zmiennymi w Java wygląda to następująco:

int x = 1;
int y = 1;
int z = 2;
x == y && z > y; // true && true => true
x <= y && z <= x; // true && false => false
x == y || z > y; // true || true => true
x <= y || z <= x; // true || false => true

Operatory w języku Java mają swój priorytet. Dzięki temu mnożenie jest wykonywane przed dodawaniem. Podobnie jest tutaj, operatory <, ==, < itp. mają wyższy priorytet niż && czy ||.

Skrócony cykl

Operatory && i || są operatorami, które czasami mogą pomiąć sprawdzanie drugiej części warunku. Proszę spójrz na przykład:

public boolean metodaA() {
    System.out.println("metodaA");
    return true;
}

public boolean metodaB() {
    System.out.println("metodaB");
    return false;
}

metodaA() || metodaB();  // 1
metodaB() && metodaA();  // 2

metodaA i metodaB to metody zwracające wartość logiczną. Dodatkowo każda z nich wypisuje na konsolę łańcuch znaków.

W pierwszym przypadku wartość całego wyrażenia to true jeśli którykolwiek z członów ma wartość true. W związku z tym drugi człon (w tym przypadku metodaB) nie musi być sprawdzany, ponieważ pierwszy (w tym przypadku metodaA) zwraca true.

W drugim przypadku wartość całego wyrażenia to false jeśli którykolwiek z członów ma wartość false. W związku z tym drugi człon (w tym przypadku metodaA) nie musi być sprawdzany, ponieważ pierwszy (w tym przypadku metodaB) zwraca false.

Pobierz opracowania zadań z rozmów kwalifikacyjnych

Przygotowałem rozwiązania kilku zadań algorytmicznych z rozmów kwalifikacyjnych. Rozkładam je na czynniki pierwsze i pokazuję różne sposoby ich rozwiązania. Dołącz do grupy ponad 6147 Samouków, którzy jako pierwsi dowiadują się o nowych treściach na blogu, a prześlę je na Twój e-mail.

Instrukcje warunkowe

Instrukcja if, else if, else

Do tej pory każda linijka kodu, którą napisałeś w działającym programie została wykonana. W większych programach często musimy decydować co powinno być wykonane. Na przykład jeśli jest temperatura jest większa niż 37°C2 oznacza to, że możesz być chory. Jeśli jest mniejsza niż 36°C możesz być osłabiony.

To jest najprostsza instrukcja warunkowa. Blok kodu zostanie wykonany jeśli wartość w nawiasie () będzie prawdą. W przykładzie sprawdzamy, czy temperatura jest mniejsza niż 36 stopni.

if (temperature < 36) {
    System.out.println("Jesteś osłabiony?");
}

else, podobnie jak if, jest słowem kluczowym. Jeśli warunek przy instrukcji if nie zostanie spełniony wywołany zostanie zestaw instrukcji w bloku else.

if (temperature < 36) {
    System.out.println("Jesteś osłabiony?");
}
else {
    System.out.println("Masz 36 lub więcej stopni.");
}

W języku Java możesz także połączyć else z if jak w przykładzie poniżej:

int temperature = 38;
if (temperature < 36) {
    System.out.println("Jesteś osłabiony?");
}
else if (temperature < 37) {
    System.out.println("Wszystko w normie!");
}
else if (temperature < 38) {
    System.out.println("Jesteś przeziębiony?");
}
else {
    System.out.println("Masz co najmniej 38 stopni! Biegiem do lekarza!");
}

Kod ten na początku sprawdza czy temperatura jest mniejsza niż 36°C. Jeśli ten warunek nie jest spełniony sprawdzamy czy temperatura jest mniejsza niż 37°C. Podobnie działa kolejny warunek. Jeśli żaden z nich nie jest spełniony zostaje wykonany kod w bloku po else.

Instrukcja switch

Jeśli mamy kilka warunków if następujących po sobie możemy zamienić je na inną konstrukcję – switch. Przejdźmy od razu do przykładu:

int temperature = 37;
switch (temperature) {
    case 35:
        System.out.println("Jesteś osłabiony?");
        break;
    case 36:
        System.out.println("Wszystko w normie!");
        break;
    case 37:
        System.out.println("Jesteś przeziębiony?");
        break;
    case 38:
        System.out.println("Chyba jesteś chory.");
        break;
    default:
        System.out.println("Nie wiem jak się czujesz :(");
        break;
}

switch w przykładzie powyżej sprawdza wartość zmiennej temperature i w zależności od jej wartości wykonuje odpowiedni kod zdefiniowany w case poniżej. W naszym przypadku na ekranie zostanie wypisane Jesteś przeziębiony?.

Proszę zwróć uwagę na nowe słowo kluczowe break. switch dopasowuje case do wartość zmiennej, i wykonuje kod od pierwszego pasującego warunku do słowa kluczowego break.

int temperature = 35;
switch (temperature) {
    case 35:
        System.out.println("Jesteś osłabiony?");
    case 36:
        System.out.println("Wszystko w normie!");
    case 37:
        System.out.println("Jesteś przeziębiony?");
        break;
    case 38:
        System.out.println("Chyba jesteś chory.");
        break;
}

W przykładzie powyżej break zostało pominięte przy case 35 oraz case 36. Wartość zmiennej pasuje do case 35. Przez pominięcie słowa kluczowego break na ekranie zostaną wypisane 3 linijki. Dzieje się tak dlatego, że słowo kluczowe break zostało wypisane dopiero przy case 37.

Jesteś osłabiony?
Wszystko w normie!
Jesteś przeziębiony?

Warunek default zostaje wykonany jeśli żadna gałąź case nie pasuje do wartości zmiennej. Zachęcam Cię do eksperymentowania :).

Instrukcja switch jest trochę ograniczona. Sprawdzana zmienna może być zmienną kilku typów na przykład int czy String.

Pętle w języku Java

Pętla for

Pętla pozwala na wykonanie fragmentu kodu wielokrotnie. Na przykład jeśli chcemy wypisać wszystkie liczby od 0 do 10 możemy to zrobić przy pomocy pętli

for (int number = 0; number <= 10; number++) {
    System.out.println(number);
}

Pierwsza linijka to nic innego jak właśnie definicja pętli for. Kod wewnątrz nawiasu () możemy podzielić na trzy części:

  1. inicjalizacja zmiennych,
  2. sprawdzenie warunku,
  3. zmiana wartości zmiennych.

W części inicjalizującej zmienne robimy coś co już znasz, tworzymy zmienną number i przypisujemy jej wartość 0. Kolejna część to sprawdzenie czy wartość zmiennej jest mniejsza bądź równa 10. Nowa dla Ciebie jest trzecia część a właściwie operator ++. Proszę spójrz na przykład poniżej:

int counter = 0;
counter = counter + 1;
counter += 1;
counter++;

Każda z trzech ostatnich linii zwiększa o jeden wartość zmiennej counter. Ostatnia wersja jest najkrótsza dlatego jest najczęściej spotykana w tego typu pętlach.

Kolejnym przykładem użycia pętli może być wyświetlenie każdego elementu tablicy

int[] primeNumbers = new int[] {2, 3, 5, 7};
for (int index = 0; index < primeNumbers.length; index++) {
    System.out.println(primeNumbers[index]);
}

W pierwszej linijce definiujemy tablicę z kilkoma liczbami pierwszymi (jeśli nie wiesz czym są liczby pierwsze możesz przeczytać o nich w artykule na Wikipedii). Następnie w pętli wyświetlamy każdy element tej tablicy.

Istnieje też uproszczona wersja pętli for. Jeśli nie musisz mieć dostępu do zmiennej reprezentującej na przykład indeks tablicy możesz użyć poniżej wersji pętli.

for (int primeNumber : primeNumbers) {
    System.out.println(primeNumber);
}

Tutaj w pierwszej linijce do zmiennej primeNumber przypisujemy kolejne elementy tablicy primenNumbers, które następnie wyświetlamy na ekranie.

Obie wersje pętli for możesz utworzyć dużo łatwiej. Z jednego z poprzednich artykułów wiesz już o istnieniu live templates. Okazuje się, że IntelliJ Idea pomaga nam także w tworzeniu pętli. Wystarczy, że wpiszesz fori i naciśniesz Enter, IntelliJ Idea wstawi szablon pętli za Ciebie. Jeśli w ten sam sposób chcesz wstawić szablon uproszczonej pętli for możesz wpisać I i nacisnąć Enter.

Pętla while

W języku Java istnieją także inne konstrukcje pętli. Kolejnym przykładem jest pętla while. Tym razem przejdziemy od razu do przykładu

int number = 0;
while (number < 10) {
    System.out.println(number);
    number++;
}

Pętla while wykonuje swoje ciało (kod wewnątrz {}) tak długo jak spełniony jest warunek zapisany pomiędzy () (lub pętla nie zostanie przez nas przerwana). Podobnie jak w poprzednich przykładach pętla wyświetla zestaw liczb, tym razem liczby od 0 do 9.

Poniżej kolejny przykład pętli while. Tym razem warunek zakończenia pętli sprawdzany jest w jej ciele. Użyliśmy do tego celu instrukcji warunkowej if. Słowo kluczowe break napotkane wewnątrz pętli natychmiast przerywa jej wykonanie (dotyczy to także pętli for).

int number = 0;
while (true) {
    System.out.println(number);
    number++;
    if (number == 10) {
        break;
    }
}

Nieskończona pętla

Pętle mają to do siebie, że przy źle zdefiniowanych warunkach mogą wykonywać kod wewnątrz swojego ciała w nieskończoność. Jest to dość częsty błąd, szczególnie spotykany na początku przygody z programowaniem. Dlatego należy uważnie sprawdzać warunki zakończenia pętli, żeby uniknąć tego błędu.

Poniżej przykład pętli wyświetlającej 1 w nieskończoność.

while(true) {
    System.out.println(1);
}

Słowa kluczowe wewnątrz pętli

Znasz już słowo kluczowe break. Powoduje ono zakończenie pętli w której aktualnie jesteś. Kolejna iteracja nie zostanie uruchomiona. Istnieje także słowo kluczowe continue, które także można użyć w ciele pętli (zarówno for jak i while).

To słowo kluczowe powoduje przeskoczenie do kolejnej iteracji pętli. Proszę spójrz na przykład poniżej, który wypisuje liczby nieparzyste mniejsze od 10 używając pętli while:

int i = 0;
while (i < 10) {
    i++;
    if (i % 2 == 0) {
        continue;
    }
    System.out.println(i);
}

Zadania

  1. Poza poznanym dzisiaj operatorem ++ istnieje też jego odpowiednik zmniejszający wartość zmiennej o 1. Jest nim --. Napisz program, który wypisze na ekranie malejąco wszystkie liczby od 20 do 10.
  2. Napisz pętlę while, która wypisze na ekranie wszystkie liczby od 10 do 20 włącznie.
  3. Napisz pętlę for, która wypisze na ekranie wszystkie liczby nieparzyste od -10 do 40.
  4. Przerób pętlę z zadania trzeciego na pętlę while.
  5. Napisz metodę, która jako jedyny argument przyjmie zmienną typu int[] i zwróci sumę wszystkich elementów tablicy.
  6. Przerób funkcję z zadania piątego tak, żeby metoda przyjmowała tablicę dwuwymiarową typu int[][].

Przygotowałem też zestaw przykładowych rozwiązań powyższych zadań. Zachęcam jednak do ich samodzielnego rozwiązania, wtedy nauczysz się najwięcej.

Podsumowanie

Dzisiaj znów nauczyłeś się paru nowych rzeczy dotyczących Javy. Mam nadzieję, że artykuł Ci się spodobał. Jeśli tak będę wdzięczny jeśli podzielisz się nim ze swoimi znajomymi. Proszę polub stronę na Facebooku jeśli nie chcesz pominąć żadnego nowego artykułu. Na dzisiaj już starczy wiedzy :) Miłego dnia i do następnego razu!

  1. Tak zwaną algebrę Boole’a 

  2. Tutaj lepszym pomysłem byłyby liczby “z przecinkiem”, napisałem osobny artykuł na temat liczb zmiennoprzecinkowych

Pobierz opracowania zadań z rozmów kwalifikacyjnych

Przygotowałem rozwiązania kilku zadań algorytmicznych z rozmów kwalifikacyjnych. Rozkładam je na czynniki pierwsze i pokazuję różne sposoby ich rozwiązania. Dołącz do grupy ponad 6147 Samouków, którzy jako pierwsi dowiadują się o nowych treściach na blogu, a prześlę je na Twój e-mail.

Kategorie:

Ostatnia aktualizacja:

Autor: Marcin Pietraszek


Nie popełnia błędów tylko ten, kto nic nie robi ;). Bardzo możliwe, że znajdziesz błąd, literówkę, coś co wymaga poprawy. Jeśli chcesz możesz samodzielnie poprawić tę stronę. Jeśli nie chcesz poprawiać błędu, który udało Ci się znaleźć będę wdzięczny jeśli go zgłosisz. Z góry dziękuję!

Zostaw komentarz