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:
- inicjalizacja zmiennych,
- sprawdzenie warunku,
- 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
- 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. - Napisz pętlę while, która wypisze na ekranie wszystkie liczby od 10 do 20 włącznie.
- Napisz pętlę for, która wypisze na ekranie wszystkie liczby nieparzyste od -10 do 40.
- Przerób pętlę z zadania trzeciego na pętlę while.
- Napisz metodę, która jako jedyny argument przyjmie zmienną typu
int[]
i zwróci sumę wszystkich elementów tablicy. - 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!
-
Tak zwaną algebrę Boole’a ↩
-
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.
Zostaw komentarz