Wir wollen im Beispiel Rechner den Umfang von verschiedenen Formen berechnen können. Dazu machen wir uns jetzt ein kleines Menü für das Konsolenfenster. Dafür können wir die if-Anweisung oder die switch-Anweisung verwenden, um einzelne Menüpunkte auswählen zu können.
Die if-Anweisug
Hier ist das ganze Beispiel:
- import java.util.*;
- public class Rechner {
- public static void main(String[] args) {
- Scanner eingabe;
- eingabe = new Scanner(System.in);
- final double PI = 3.141592653589793D;
- double a, b, c;
- // Menü auf der Konsole ausgeben
- System.out.println("1. Quadrat");
- System.out.println("2. Rechteck");
- System.out.println("3. Kreis");
- System.out.println("-------------");
- System.out.print(": ");
- // Tastatureingabe abfangen
- int menueEingabe = eingabe.nextInt();
- System.out.println("-------------");
- // Entscheidungsanweisung
- if (menueEingabe == 1) {
- // Abfrage der benötigten Werte
- System.out.println("Umfangesberechnung
eines Quatrats");
- System.out.print("Länge: ");
- a = eingabe.nextDouble();
- // Berechnung
- c = a * 4;
- System.out.println("-------------");
- System.out.println("Der Umfange des
Quadrats beträgt: " + c);
- }
- else if (menueEingabe == 2) {
- // Abfrage der benötigten Werte
- System.out.println("Umfangesberechnung
eines Rechtecks");
- System.out.print("Länge: ");
- a = eingabe.nextDouble();
- System.out.print("Breite: ");
- b = eingabe.nextDouble();
- // Berechnung
- c = a * 2 + b * 2;
- System.out.println("-------------");
- System.out.println("Der Umfange des
Rechtecks beträgt: " + c);
- }
- else if (menueEingabe == 3) {
- double r;
- // Abfrage der benötigten Werte
- System.out.println("Umfangesberechnung
eines Kreises");
- System.out.print("Radius: ");
- r = eingabe.nextDouble();
- // Berechnung
- c = r * 2 * PI;
- System.out.println("-------------");
- System.out.println("Der Umfange des
Kreises beträgt: " + c);
- }
- else {
- // Ausgabe bei fehlerhafter Eingabe
- System.out.println("Ungültige Eingabe!");
- }
- // Der Eingabestrom wird geschlossen. Es ist
- // hier zwar nicht unbedingt notwendig, aber
- // bei Eclipse wird sonst immer eine Warnung
- // ausgegeben.
- eingabe.close();
- }
- }
Wie man sieht ist es schon einiges an Code, was da zusammenkommt. Gehen wir einfach mal alles der Reihe nach durch.
- import java.util.*;
Wir teilen den Konstruktor mit dass wir das Paket java.util, wegen der Tastatureingabe brauchen.
- Scanner eingabe;
- eingabe = new Scanner(System.in);
Hier erzeugen wir ein Objekt des Datentypen Scanner und fangen den Eingabestrom ab.
- final double PI = 3.141592653589793D;
Mit final deklarieren wir unsere Konstante PI und initialisieren den Wert.
- double a, b, c;
Hier deklarieren wir die Variablen a, b und c.
- System.out.println("1. Quadrat");
- System.out.println("2. Rechteck");
- System.out.println("3. Kreis");
- System.out.println("-------------");
- System.out.print(": ");
Auf der Konsole wird unser Menü ausgegeben.
- int menueEingabe = eingabe.nextInt();
In dieser Zeile wird eine Variable des Typs Integer (int) deklariert und der Eingabestrom wird als Integer mit der Methode nextInt() übergeben. Solange die Eingabe einen gültigen Wert hat, wenn nicht gibt der Kompiler eine Fehlermeldung zurück.
- if (menueEingabe == 1) {
// Abfrage der benötigten Werte
- ...
- }
- else if (menueEingabe == 2) {
- // Abfrage der benötigten Werte
- ...
- }
- else if (menueEingabe == 3) {
- double r;
- ...
- }
- else {
- // Ausgabe bei fehlerhafter Eingabe
- System.out.println("Ungültige Eingabe!");
- }
In Zeile 1 ist die erste if-Anweisung, die Anweisung zwischen ( und ) bezeichnet man als Ausdruck. Bei dem ausführen des Programmes wird erst der Ausdruck ausgewertet, dessen Ergebnistyp boolean sein muss. Hier im Beispiel wird verglichen ob die Variable menueEingabe gleich 1 ist, wenn ja (also true) werden die Anweisungen die in den folgenden beiden { und } (Block) steht ausgeführt und die beiden else if-Anweisung in Zeile 5 und 9 und die else-Anweisung in Zeile 13 werden nicht ausgewertet, natürlich werden auch nicht dessen Anweisungsblöcke ausgeführt.
Wenn der Ergebnistyp boolean false ist in der if-Anweisung in Zeile 1, wird der dazugehörige Anweisungsblock nicht ausgeführt und die else if-Anweisung in Zeile 5 wird ausgewertet. Ist dieser auch false wird die else if-Anweisung aus Zeile 9 ausgewertet. Wenn keine der Anweisungen true ergeben, wird die else-Anweisung in Zeile 13 ausgeführt.
Wenn der Anweisungsblock der if-, else if- und else-Anweisungen nur eine Anweisung enthält kann die { und } auch weggelassen werden. Hier ein Beispiel:
- if (i == 1)
- System.out.println("Nur eine Anweisung für if");
- else if (i == 6)
- System.out.println("Nur eine Anweisung für else if");
- else
- System.out.println("Nur eine Anweisung für else");
Es ist auch möglich mit Logischen Operatoren mehrere Anweisungen zusammen im Ausdruck auszuwerten.
Hier ein Beispiel:
- if (a == 0 && b == 0)
- ...
oder
- if (a >= 0 || b <= 8)
- ...
Durch die Logischen Operatoren können auch beliebig viele Anweisungen im Ausdruck zusammen ausgewertet werden nicht nur zwei. Noch ein Beispiel:
- if (b == true)
- ...
Die if-Anweisung wird ausgeführt wenn die Variable b true ist. es gibt eine verkürzte Schreibweise dafür:
- if (b)
- ...
Wenn der Wert false erwartet werden soll, kann dafür der !-Operator (negiert b) verwendet werden:
- if (!b)
- ...
Es ist Geschmackssache des Programmierers, ob er die normale oder die verkürzte Schreibweise verwendet.
Die switch-Anweisung
Hier ist der Teil der Entscheidungsanweisung, dieses Mal mit der switch-Anweisung:
- // Entscheidungsanweisung
- switch(menueEingabe) {
- case 1:
- // Abfrage der Benötigten Werte
- System.out.println("Umfangesberechnung eines
Quatrats");
- System.out.print("Länge: ");
- a = eingabe.nextDouble();
- // Berechnung
- c = a * 4;
- System.out.println("-------------");
- System.out.println("Der Umfange des Quadrats
beträgt: " + c);
- break;
- case 2:
- // Abfrage der Benötigten Werte
- System.out.println("Umfangesberechnung eines
Rechtecks");
- System.out.print("Länge: ");
- a = eingabe.nextDouble();
- System.out.print("Breite: ");
- b = eingabe.nextDouble();
- // Berechnung
- c = a * 2 + b * 2;
- System.out.println("-------------");
- System.out.println("Der Umfange des Rechtecks
beträgt: " + c);
- break;
- case 3:
- double r;
- // Abfrage der Benötigten Werte
- System.out.println("Umfangesberechnung eines
Kreises");
- System.out.print("Radius: ");
- r = eingabe.nextDouble();
- // Berechnung
- c = r * 2 * PI;
- System.out.println("-------------");
- System.out.println("Der Umfange des Kreises
beträgt: " + c);
- break;
- default:
- // Ausgabe bei fehlerhafter Eingabe
- System.out.println("Ungültige Eingabe!");
- }
Jetzt zu der ersten Zeile:
- switch(menueEingabe) {
In den ( und ) nach switch steht wieder unser Ausdruck. Hier ist des die Variable menueEngabe. Dann folgt ein Anweisungsblock der zwischen { und } steht.
- case 1:
Nach dem Schlüsselwort case wird eine Konstante mit Doppelpunkt angegeben, jede case dass im Anweisungsblock von switch steht, ist eine Einsprungsmarke. Wenn also die Variable menueEingabe gleich 1 ist, werden ab dieser Einsprungsmarke die Anweisungen ausgeführt, bis zur nächsten break-Anweisung. Wenn die Variable nicht 1 ist, wird gleich zum nächsten case gegangen. Ist keines der case Konstanten zutreffen werden die Anweisungen die nach der default-Anweisung folgen ausgeführt.
- default:
// Ausgabe bei fehlerhafter Eingabe
- System.out.println("Ungültige Eingabe!");
Nach dem default-Anweisung ist keine break-Anweisung mehr notwendig, weil die default-Anweisung das Ende der switch-Anweisung ist.
Hier noch ein kleine Beispiel:
- switch(menueEingabe) {
- case 1:
- System.out.println("Case 1");
- case 2:
- System.out.println("Case 2");
- break;
- case 3:
- System.out.println("Case 3");
- break;
- default:
- System.out.println("Default");
- }
Wenn die Variable menueEingabe gleich 1 ist werden die Anweisungen von der Einsprungsmarke:
- case 1:
und von
- case 2:
ausgeführt. Warum das? Es ist ganz einfach, wenn keine break-Anweisung gefunden wir bis zur nächsten Einsprungsmarke werden deren Anweisungen auch noch mit ausgeführt bis auf eine break-Anweisung gestoßen wird. Es gibt Situationen bei dem dies beabsichtigt ist.
Keine Kommentare:
Kommentar veröffentlichen