1.02 Java als Taschenrechner

Rechnen mit ganzen Zahlen

Die vier Grundrechenarten Addition, Subtraktion, Multiplikation und Division erreichen wir in Java mit den Symbolen +, , * und /. Zum Beispiel führt dieses Programm

public class RechnenMitGanzenZahlen_01 {
  
  public static void main(String[] args) {
    
    System.out.println(20 + 5);
    System.out.println(20 - 5);
    System.out.println(20 * 5);
    System.out.println(20 / 5);
  }

}

in der Konsole zu folgender Ausgabe:

25
15
100
4

Die Division sollten wir noch genauer unter die Lupe nehmen. Sehen wir uns dazu folgendes Programm an:

public static void main(String[] args) {
    
    System.out.println(21 / 5); // Ergebnis: 4
    System.out.println(22 / 5); // Ergebnis: 4
    System.out.println(23 / 5); // Ergebnis: 4
    System.out.println(24 / 5); // Ergebnis: 4
    System.out.println(25 / 5);	// Ergebnis: 5
    
  }

}

Wie sind diese Ergebnisse zu interpretieren?

Im Grunde ist die Antwort simpel: Hier werden einfach alle Nachkommastellen abgeschnitten. Das liegt daran, dass wir in diesen Rechnungen nur ganze Zahlen verwenden. Daher geht Java davon aus, dass wir als Ergebnis wiederum eine ganze Zahl erhalten möchten – auch wenn das Ergebnis dann eventuell ungenau ist. Diese Vorgehensweise nennt man übrigens ganzahlige Division.

Java hat noch eine Überraschung für uns parat. Es gibt nämlich eine weitere Art von Division:

public class RechnenMitGanzenZahlen_03 {

  public static void main(String[] args) {

    System.out.println(21 % 5); // Ergebnis: 1
    System.out.println(22 % 5); // Ergebnis: 2
    System.out.println(23 % 5); // Ergebnis: 3
    System.out.println(24 % 5); // Ergebnis: 4
    System.out.println(25 % 5); // Ergebnis: 0

  }

}

Diese Ergebnisse sind jeweils der Rest, der bei einer Division übrig bleibt. Das kennen wir doch schon aus der Grundschule! 22 durch 5 ist 4 Rest 2. Wir sagen hier kurz 22 modulo 5 ist 4.

Schauen wir uns noch ein Anwendungsbeispiel für diese beiden Divisionen an. Angenommen, wir wollen in den Sommerferien 30 Tage im Urlaub verbringen. Wie viele volle Wochen und Tage sind das? Das können wir mit Java nun schnell ausrechnen:

public class RechnenMitGanzenZahlen_04 {

  public static void main(String[] args) {
    
    System.out.println(30 / 7); // Ergebnis: 4
    System.out.println(30 % 7); // Ergebnis: 2

  }

}

Wir sind also 4 Wochen und 2 Tage im Urlaub.

Im Clip werden die Grundrechenarten noch einmal kurz durchgegangen. Außerdem gibt es dort noch andere Anwendungsbeispiele für die ganzahlige Division und die Modulorechnung.


Hintergrundinfo

Die ganzzahlige Division und die Modulorechnung sind keine Besonderheit von Java, sondern in den meisten Programmiersprachen umgesetzt. Gerade die Modulorechnung hat in der Informatik eine überraschend große Bedeutung. Beispielsweise ist sie ein grundlegendes Werkzeug in der Kryptologie.


Rechnen mit Dezimalzahlen

Nachdem wir das Rechnen mit ganzen Zahlen schon kennengelernt haben, wird uns das Rechnen mit Dezimalzahlen leicht verständlich sein.

Die Grundrechenarten funktionieren so, wie wir erwarten würden. Das Programm

public class Dezimalzahlen_01 {

    public static void main(String[] args) {
        
        System.out.println(20 + 2.5);
        System.out.println(20 - 2.5);
        System.out.println(20 * 2.5);
        System.out.println(20 / 2.5);
    }

}

liefert wie ein gewöhnlicher Taschenrechner diese Ausgaben:

22.5
17.5
50.0
8.0

Uns sollte hierbei auffallen, dass Dezimalzahlen mit einem Punkt statt eines Kommas geschrieben werden.

Außerdem sollten wir uns merken, dass Java automatisch auf Rechnen mit Dezimalzahlen umschaltet, sobald eine beteiligten Zahlen eine Dezimalzahl ist – in den Rechnungen oben ist ja nur die 2,5 eine Dezimalzahl und die 20 eine ganze Zahl.

Auch beim Rechnen mit Dezimalzahlen haben wir die Möglichkeit, Reste zu bestimmen. Die Anweisung

System.out.println(10 % 1.5);

liefert beispielsweise die Ausgabe 1.0, denn die 1,5 passt sechsmal in die 10, es bleibt dann aber noch ein Rest von 1 übrig.

Beim Rechnen mit Dezimalzahlen müssen wir uns immer darüber bewusst sein, dass Rundungsfehler auftreten können. Manchmal auch an Stellen, an denen man dies gar nicht erwartet. Sehen wir uns beispielsweise dieses Programm an:

public class Rundungsfehler {

    public static void main(String[] args) {

        System.out.println(10 / 4.8);
        System.out.println(10 % 4.8);

    }

}

Die genauen Ergebnisse wären 2,08333… und 0,4. Wir erhalten als Ausgabe aber 2.0833333333333335 (statt korrekt gerundet 2,0833333333333333) und 0.40000000000000036 (statt 0,4).

Die Tatsache, dass hier Rundungsfehler auftreten, ist keine Schwachstelle von Java, sondern hat mit der Darstellung von Dezimalzahlen – oder genauer gesagt Fließkommazahlen – im Rechner zu tun.

Im Clip werden noch einmal die ersten Rechenbeispiele von ganz oben betrachtet. Danach kommen wir zu ein paar anderen Beispielen, um sicher zu gehen, dass wir alles richtig verstanden haben.

Ein Gedanke zu „1.02 Java als Taschenrechner“

Schreibe einen Kommentar zu Alexander von hardwarekanal.de Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.