Zum Inhalt springen

Operatoren und Ausdrücke

Mit Variablen allein passiert noch nicht viel. Erst mit Operatoren wird gerechnet, verglichen und entschieden. Ein Ausdruck ist alles, was einen Wert ergibt: 3 + 4, alter >= 18 oder einfach preis.

  • mit ganzen Zahlen und Kommazahlen rechnen – und den Unterschied kennen
  • den Rest-Operator % sinnvoll einsetzen
  • Bedingungen mit Vergleichen und &&, ||, ! formulieren
  • Texte richtig vergleichen
  • fertige Rechenfunktionen aus der Klasse Math nutzen
Rechnen.java
package de.drv;
public class Rechnen {
public static void main(String[] args) {
System.out.println(7 + 2);
System.out.println(7 - 2);
System.out.println(7 * 2);
System.out.println(7 / 2);
System.out.println(7 % 2);
System.out.println(7 / 2.0);
System.out.println(7.0 / 2);
System.out.println(1 + 2 * 3);
System.out.println((1 + 2) * 3);
}
}
Terminal-Fenster
9
5
14
3
1
3.5
3.5
7
9
Operator Bedeutung
+ - * Addition, Subtraktion, Multiplikation
/ Division
% Rest der ganzzahligen Division („modulo“)

Es gilt Punkt vor Strich – *, / und % werden vor + und - ausgewertet. Mit Klammern legst du die Reihenfolge selbst fest.

7 / 2 ergibt 3, nicht 3,5. Sind beide Werte ganze Zahlen, ist auch das Ergebnis eine ganze Zahl – die Nachkommastellen fallen weg. Ist mindestens einer der Werte eine Kommazahl, wird mit Kommazahlen gerechnet: 7 / 2.0 ergibt 3.5.

% liefert den Rest einer ganzzahligen Division: 17 % 5 ergibt 2, denn 17 = 3 · 5 + 2. Das klingt unscheinbar, ist aber sehr nützlich:

Ausdruck ergibt nützlich für
zahl % 2 0 bei geraden Zahlen gerade oder ungerade?
zahl % 10 die letzte Ziffer Ziffern zerlegen
zahl % 7 == 0 true, wenn durch 7 teilbar Teilbarkeit

Zusammen mit / lassen sich Werte in Einheiten zerlegen:

Zeit.java
package de.drv;
import java.util.Scanner;
public class Zeit {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Sekunden: ");
int gesamt = scanner.nextInt();
int stunden = gesamt / 3600;
int minuten = gesamt % 3600 / 60;
int sekunden = gesamt % 60;
System.out.printf("%d:%02d:%02d%n", stunden, minuten, sekunden);
scanner.close();
}
}
Terminal-Fenster
Sekunden: 3725
1:02:05
System.out.println(10.0 / 0); // Infinity
System.out.println(0.0 / 0); // NaN – "Not a Number"
System.out.println(10 / 0); // Programmabbruch

Bei Kommazahlen kommt ein besonderer Wert heraus: Infinity (unendlich) oder NaN (keine Zahl). Bei ganzen Zahlen bricht das Programm ab:

Terminal-Fenster
Exception in thread "main" java.lang.ArithmeticException: / by zero

Häufig wird eine Variable auf Basis ihres eigenen Werts verändert. Dafür gibt es Kurzformen:

Zuweisung.java
package de.drv;
public class Zuweisung {
public static void main(String[] args) {
int punkte = 10;
punkte += 5;
System.out.println(punkte);
punkte -= 3;
System.out.println(punkte);
punkte *= 2;
System.out.println(punkte);
punkte++;
System.out.println(punkte);
punkte--;
System.out.println(punkte);
}
}
Terminal-Fenster
15
12
24
25
24
Kurzform bedeutet
x += 5 x = x + 5
x -= 5 x = x - 5
x *= 5 x = x * 5
x /= 5 x = x / 5
x %= 5 x = x % 5
x++ x = x + 1
x-- x = x - 1

Ein Vergleich ergibt immer einen Wahrheitswert – true oder false. Mit logischen Operatoren verknüpfst du mehrere Bedingungen:

Vergleiche.java
package de.drv;
public class Vergleiche {
public static void main(String[] args) {
int alter = 17;
boolean volljaehrig = alter >= 18;
System.out.println("volljährig: " + volljaehrig);
System.out.println("genau 17: " + (alter == 17));
System.out.println("nicht 17: " + (alter != 17));
boolean jugendlich = alter >= 14 && alter < 18;
System.out.println("jugendlich: " + jugendlich);
System.out.println("Kind oder Senior: " + (alter < 14 || alter >= 65));
System.out.println("nicht volljährig: " + !volljaehrig);
}
}
Terminal-Fenster
volljährig: false
genau 17: true
nicht 17: false
jugendlich: true
Kind oder Senior: false
nicht volljährig: true
Operator Bedeutung
== gleich
!= ungleich
< <= kleiner, kleiner oder gleich
> >= größer, größer oder gleich
&& und – beide Bedingungen müssen wahr sein
|| oder – mindestens eine Bedingung muss wahr sein
! nicht – kehrt den Wert um
Texte.java
package de.drv;
import java.util.Scanner;
public class Texte {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Weiter? (ja/nein) ");
String antwort = scanner.nextLine();
System.out.println("mit == : " + (antwort == "ja"));
System.out.println("mit equals: " + antwort.equals("ja"));
System.out.println("ohne Groß/klein: " + antwort.equalsIgnoreCase("JA"));
scanner.close();
}
}
Terminal-Fenster
Weiter? (ja/nein) ja
mit == : false
mit equals: true
ohne Groß/klein: true

Obwohl ja eingegeben wurde, liefert == false. Bei Texten prüft == nicht, ob der Inhalt gleich ist, sondern ob es sich um dasselbe Objekt handelt. Warum das so ist, verstehen wir, wenn wir über Objekte sprechen.

Für alles, was über die Grundrechenarten hinausgeht, gibt es die Klasse Math. Sie gehört zu java.lang und braucht deshalb keinen import.

Mathe.java
package de.drv;
public class Mathe {
public static void main(String[] args) {
System.out.println(Math.abs(-4));
System.out.println(Math.max(3, 7));
System.out.println(Math.min(3, 7));
System.out.println(Math.pow(2, 10));
System.out.println(Math.sqrt(2));
System.out.println(Math.round(2.5));
System.out.println(Math.PI);
}
}
Terminal-Fenster
4
7
3
1024.0
1.4142135623730951
3
3.141592653589793
Aufruf Ergebnis
Math.abs(x) Betrag
Math.max(a, b), Math.min(a, b) größerer bzw. kleinerer Wert
Math.pow(a, b) a hoch b – immer double
Math.sqrt(x) Quadratwurzel – immer double
Math.round(x) kaufmännisch gerundet – als long
Math.PI die Kreiszahl π
Symptom bzw. Meldung Ursache
Ergebnis ohne Nachkommastellen Ganzzahldivision – einen Wert als Kommazahl schreiben oder umwandeln
Type mismatch: cannot convert from int to boolean = statt == in einer Bedingung
Type mismatch: cannot convert from long to int Math.round(…) liefert long – Cast (int) oder long-Variable
ArithmeticException: / by zero ganzzahlige Division durch 0
Textvergleich liefert false, obwohl der Text stimmt == statt equals
  1. Lies eine Anzahl Sekunden ein und gib sie als Tage, Stunden, Minuten und Sekunden aus.

  2. Lies eine dreistellige Zahl ein und berechne ihre Quersumme – nur mit / und %.

  3. Lies ein Jahr ein und gib aus, ob es ein Schaltjahr ist – als true oder false. Regel: durch 4 teilbar, aber nicht durch 100 – es sei denn, durch 400.

  4. Lies den Radius eines Kreises ein und gib Umfang und Fläche mit zwei Nachkommastellen aus.

  5. Lies zwei Punkte im Koordinatensystem ein (x1, y1, x2, y2) und berechne ihren Abstand: √((x2−x1)² + (y2−y1)²).

  6. Lies eine Antwort ein und gib true aus, wenn sie ja, j oder yes lautet – egal, ob groß oder klein geschrieben.