Działania arytmetyczne
Zacznijmy od najprostszej rzeczy - od operacji arytmetycznych. Są to dobrze znane dodawanie (znak +), odejmowanie (-), mnożenie (*) i dzielenie (/).public class Main {
public static void main(String[] args) {
int x = 999;
int y = 33;
System.out.println(x+y);
System.out.println(x-y);
System.out.println(x*y);
System.out.println(x/y);
}
}
Wyjście konsoli:
1032
966
32967
30
To wszystko już wykorzystałeś. Można do nich dodać operację %
- pozostałą część dzielenia.
public class Main {
public static void main(String[] args) {
int x = 33;
int y = 33%2;
System.out.println(y);
}
}
Wyjście konsoli:
1
W tym przykładzie dzielimy 33 przez 2. W rezultacie otrzymujemy 16 i pozostaje dodatkowy „ogon”, którego nie można podzielić przez 2 - jeden. Ten „ogon” będzie wynikiem operacji „reszta z dzielenia”. Java (podobnie jak matematyka) implementuje operatory porównania . Pewnie znacie je też ze szkoły:
- równa się (
==
) - więcej (
>
) - mniej (
<
) - większe bądź równe (
>=
) - mniejszy lub równy (
<=
) - nie równe (
!=
)
==
, a nie jednym znakiem =
. Znak jednostki =
w Javie to operator przypisania, w którym zmiennej przypisuje się liczbę, ciąg znaków lub wartość innej zmiennej.
public class Main {
public static void main(String[] args) {
int x = 33;
int y = 999;
System.out.println(x=y);// oczekuj, że false zostanie wydrukowane na konsoli
}
}
Wyjście konsoli:
999
Ups! Zdecydowanie nie jest to wynik, jakiego oczekiwaliśmy. To zupełnie inny rodzaj danych: spodziewaliśmy się zobaczyć boolean
, ale otrzymaliśmy liczbę. Dzieje się tak, ponieważ w nawiasach mamy operację przypisania, a nie porównanie. Do zmiennej przypisano x=y
wartość (999) , a następnie wydrukowaliśmy ją na konsoli. Prawidłowa opcja: y
x
x
public class Main {
public static void main(String[] args) {
int x = 33;
int y = 999;
System.out.println(x==y);
}
}
Wyjście konsoli:
false
Teraz poprawnie porównaliśmy 2 liczby! :) Kolejną cechą operacji przypisania ( =
) jest to, że można ją wykonać „w łańcuchu”:
public class Main {
public static void main(String[] args) {
int x = 999;
int y = 33;
int z = 256;
x = y = z;
System.out.println(x);
}
}
Wyjście konsoli:
256
Pamiętaj: przypisanie odbywa się od prawej do lewej. To wyrażenie ( x = y = z
) będzie wykonywane w krokach:
- y = z, czyli y = 256
- x = y, czyli x = 256
Operacje jednoargumentowe
Nazywa się je „jednoarowymi” od słowa „uno” - „jeden”. Otrzymali tę nazwę, ponieważ w przeciwieństwie do poprzednich przeprowadza się je na jednym numerze, a nie na kilku. Obejmują one:-
Jednoargumentowy minus. Odwraca znak liczby.
public class Main { public static void main(String[] args) { int x = 999; // zmień znak po raz pierwszy x = -x; System.out.println(x); // zmień znak po raz drugi x= -x; System.out.println(x); } }
Wyjście konsoli:
-999 999
Użyliśmy minusa jednoargumentowego dwukrotnie. W rezultacie nasza liczba stała się najpierw ujemna, a potem znowu dodatnia!
-
Zwiększanie (
++
) i zmniejszanie (--
)Operacja
++
zwiększa liczbę o jeden, a operacja--
zmniejsza ją o tę samą jednostkę.public class Main { public static void main(String[] args) { int x = 999; x++; System.out.println(x); x--; System.out.println(x); } }
Wyjście konsoli:
1000 999
x++
- zapis postfiksowy ++x
- zapis przedrostkowy Jaka jest zasadnicza różnica, jeśli wstawimy plusy i minusy przed liczbą lub po niej? Zobaczmy na przykładzie:
public class Main {
public static void main(String[] args) {
int x = 999;
int y = x++;
System.out.println(y);
}
}
Wyjście konsoli:
999
Czy jest coś nie tak! Chcieliśmy zwiększyć x
o 1 i przypisać nową wartość zmiennej y
. Czyli y powinno być równe 1000. Ale mamy inny wynik - 999. Okazuje się, że x
nie zostało zwiększone, a operacja zwiększania nie zadziałała? Jak to działało. Aby to sprawdzić, spróbuj wydrukować x na konsoli na końcu :)
public class Main {
public static void main(String[] args) {
int x = 999;
int y = x++;
System.out.println(y);
System.out.println(x);
}
}
Wyjście konsoli:
999
1000
Właściwie dlatego właśnie tak nazywa się operację postfiksową: jest ona wykonywana po wyrażeniu głównym. Czyli w naszym przypadku: int y = x++;
najpierw zostanie wykonana y = x
(a zmiennej y zostanie przypisana wartość początkowa x
), a dopiero potem x++
.. A co jeśli takie zachowanie nas nie usatysfakcjonuje? Musisz użyć notacji przedrostkowej:
public class Main {
public static void main(String[] args) {
int x = 999;
int y = ++x;
System.out.println(y);
}
}
W tym przypadku zadziała najpierw ++x
i dopiero potem. y = x;
O tej różnicy warto od razu pamiętać, żeby nie popełnić błędów w prawdziwym programie, w którym całe zachowanie może przez to wywrócić się do góry nogami :)
Połączone operacje
Dodatkowo w Javie występują tzw. operacje łączone. Używają kombinacji dwóch operacji:- Zadanie
- Operacja arytmetyczna
+=
-=
*=
/=
%=
public class Main {
public static void main(String[] args) {
int x = 999;
int y = 33;
x += y;
System.out.println(x);
}
}
Wyjście konsoli:
1032
x += y
oznacza x = x + y
. Dla zachowania zwięzłości używane są dwa znaki z rzędu. Działa to również z kombinacjami -=
, *=
i /=
.%=
Operacje logiczne
Oprócz operacji na liczbach Java wykonuje także operacje na zmiennych logicznych -true
i false
. Operacje te wykonywane są za pomocą operatorów logicznych
-
!
— Operator „NIE”. Odwraca wartość zmiennej logicznejpublic class Main { public static void main(String[] args) { boolean x = true; System.out.println(!x); } }
Wyjście konsoli:
false
-
&&
— operator „AND”. Zwraca wartośćtrue
tylko wtedy, gdy oba operandy totrue
.public class Main { public static void main(String[] args) { System.out.println(100 > 10 && 100 > 200); System.out.println(100 > 50 && 100 >= 100); } }
Wyjście konsoli:
false true
Wynikiem pierwszej operacji jest
false
, ponieważ jeden z warunków jest fałszywy, czyli 100 > 200. Operator wymaga, aby wszystkie warunki były prawdziwe (jak na przykład w drugim wierszu)&&
, aby zwrócić .true
-
||
— Operator „OR”. Zwracatrue
, gdy co najmniej jeden z operandów ma wartość true.Tutaj nasz poprzedni przykład będzie działał inaczej:
public class Main { public static void main(String[] args) { System.out.println(100 > 10 || 100 > 200); } }
Wyjście konsoli:
true
Wyrażenie 100 > 200 jest nadal fałszywe, ale operator „lub” jest całkowicie przekonany, że pierwsza część (100 > 10) jest prawdziwa.
GO TO FULL VERSION