4. Operatory
4.1. Operatory arytmetyczne
Jednoargumentowe:
− |
zmiana znaku |
a = - a; |
+ |
dla symetrii |
+ 3.14 |
Dwuargumentowe:
+ |
dodawanie |
a + b |
− |
odejmowanie |
a − b |
∗ |
mnożenie |
a ∗ b |
/ |
dzielenie |
a / b |
% |
dzielenie modulo |
a % b |
Dzielenie całkowite odrzuca cześć ułamkową, a dzielenie modulo ja zachowuje:
7/2 daje 3 7 % 2 daje 1
Zatem, dla liczb całkowitych wzór
( x / y ) ∗ y + x % y
zwraca wartość x.
Stałe NEGATIVE_INFINITY, POSITIVE_INFINITY i NaN przechowywane w obiektowych klasach liczb pozwalają uniknąć zgłaszania błędów przy operacjach arytmetycznych:
x |
y |
x / y |
x % y |
wartość |
±0.0 |
±∞ |
NaN |
wartość |
±∞ |
±0.0 |
x |
±0.0 |
±0.0 |
NaN |
NaN |
±∞ |
±0.0 |
±∞ |
NaN |
±∞ |
wartość |
±∞ |
NaN |
±∞ |
±∞ |
NaN |
NaN |
Aplikacja Artymetyka
class Arytmetyka {
int x, y;
static int z;
static double d;
final static String NAGŁÓWEK = "APLIKACJA
ARYTMETYKA";
Arytmetyka ( int x, int y ) {
this.x = x;
this.y = y;
}
static void nagłówek ( ) {
System.out.println ( );
System.out.println ( NAGŁÓWEK );
System.out.println ( );
}
int dziel_mnóż ( ) {
return ( x / y ) * y + x % y;
}
static void dziel ( double x, double y ) {
double x_nad_y, x_mod_y;
x_nad_y = x / y;
x_mod_y = x % y;
System.out.println ( " " + x_nad_y + " " +
x_mod_y );
}
void pokaż ( ) {
System.out.println("x = " + x + " y = " +
y + " z = " + z );
}
public static void main ( String [ ] args ) {
nagłówek ( );
Arytmetyka a = new Arytmetyka ( 3, 4 );
// dzielenie liczb całkowitych
z = a.dziel_mnóż ( );
a.pokaż ( );
System.out.println ( "-----------------");
// dzielenie liczb rzeczywistych
System.out.println ( " x/y x%y ");
System.out.println ( "-----------------");
dziel ( 10.0, 3.0 );
dziel ( 10.0, 0.0 );
dziel ( 10.0, Double.POSITIVE_INFINITY );
dziel ( 0.0, 0.0 );
dziel ( Double.POSITIVE_INFINITY, 0.0 );
dziel ( Double.POSITIVE_INFINITY, 10.0 );
dziel ( Double.POSITIVE_INFINITY,
Double.POSITIVE_INFINITY);
}
}4.2. Operatory inkrementacji i dekrementacji
Przedrostkowe (prefiksowe):
++ <zmienna> | −− <zmienna>
Przyrostkowe (postfiksowe):
<zmienna>++ | <zmienna> −−
Przykład:
class Student {
// zmienne
String imię, nazwisko;
int nrIndeksu;
static int liczba = 0;
// konstruktor
Student ( String imię, String nazwisko ) {
this.imię = imię;
this.nazwisko = nazwisko;
nrIndeksu = ++liczba;
}
W tym przykładzie zastosowaliśmy inkrementację prefiksową. Jeżeli zamienilibyśmy ją na postfiksową ( nrIndeksu = liczba++; ), to zmienną nrIndeksu należałoby zainicjować na jedynkę.
Operatory inkrementacji i dekrementacji można stosować również do zmiennych typu char aby uzyskać następny lub poprzedni znak UNICODE.
4.3. Operatory logiczne
Jednoargumentowy:
! |
negacja |
a = !a; |
Dwuargumentowe relacyjne:
> |
większe |
a > b |
>= |
większe lub równe |
a >= b |
< |
mniejsze |
a < b |
<= |
mniejsze lub równe |
a <= b |
== |
równe |
a == b |
!= |
różne |
a != b |
Dwuargumentowe warunkowe:
&& |
koniunkcja (AND) |
a && b |
|| |
alternatywa (OR) |
a || b |
Uwagi:
do sprawdzenia, czy wartość wyrażenia arytmetycznego jest poprawna służą metody Float.isNaN ( float ) i Double.isNaN ( double );
wynik porównania referencji ref1 == ref2 jest prawdziwy, jeżeli ref1 i ref2 wskazują ten sam obiekt lub obie maja wartość null;
do porównywania napisów służy metoda
String.equals ( String )
Java zawiera również operatory logiczne działające na bitach.
4.4. Operatory przypisania
Operator zwykłego przypisania wartości "=" można łączyć z dwuargumentowymi operatorami arytmetycznymi:
+= |
a += b; |
a = a + b; |
−= |
a −= b; |
a = a − b; |
∗= |
a ∗= b; |
a = a ∗ b |
/= |
a /= b; |
a = a / b |
%= |
a %= b; |
a = a % b |
Zapis skrócony może zwiększyć efektywność programu: w wersji
tab [ indeks ( ) ] += 12;
metoda indeks ( ) jest wywoływana tylko raz, a w wersji
tab [ indeks ( ) ] = tab [ indeks ( ) ] + 12;
dwa razy.
Adam Borkowski Język programowania „Java” 4-7