Zum Hauptinhalt

Grundlegendende Programmierkonzepte in Java

While

Die nächste Erweiterung unseres Programms soll nun sein, dass Anweisungen mehrfach ausgeführt werden. Natürlich könnten wir dafür viele Male das selbe schreiben. Es geht aber auch sehr viel einfacher. Mit Hilfe der while-Schleife können wir bestimmen, dass ein Teil unseres Programms wiederholt wird. Der Aufbau von While ist sehr ähnlich zu dem des If:


 while( Wahrheitsaussage ) {
     Anweisung;
 }    
Wenn Java im Programmablauf eine While erreicht, prüft es als Erstes, ob die Wahrheitsausage wahr ist. Wenn nicht werden die Anweisungen übersprungen. Sollte die Aussage wahr sein, so wird der Anweisungsblock ausgeführt. Ist das Ende erreicht, so springt Java wieder an den Anfang der While-Schleife und beginnt von Neuem.

Was würde jetzt aber passieren, wenn der Wahrheitsausdruck immer wahr wäre? Java würde in diesem Fall für immer vom Ende der Schleife wieder zum Anfang springen. Wir hätten eine Endlosschleife. Das Programm läuft dann also bis es vom Betriebssystem beendet wird. Hierfür haben wir in Eclipse ein Button in Form eines roten Quadrats.

Wir wollen nun unser Programm so erweitern, dass der Benutzer mehrere Zeilen Text eingeben kann und wir diesen in einer Variable speichern. Durch Eingabe des Wortes “quit” soll das Programm den Ganzen Text ausgeben und sich dann beenden.

Bevor wir das umsetzen können, müssen wir aber noch klären, wie wir eine Aussage verneinen. Hierfür hat Java das Ausrufungszeichen reserviert. Wir können also schreiben


 while( ! text.equals("quit")) {} 

um auszudrücken, dass nur die Eingabe “quit” zu einem Abbruch führen soll.


import java.util.Scanner; public class Tagebuch { public static void main(String[] args) { System.out.println("Wie heißt du?"); Scanner scanner = new Scanner(System.in); String name = scanner.next(); if(name.equals("Jan")) { System.out.println("Hallo " + name + "!"); String text = ""; String eingabe = scanner.next(); while( ! eingabe.equals("quit") ) { text = text + eingabe; eingabe = scanner.next(); } System.out.println("Eingegeben wurde: " + text); } else { System.out.println("Der Benutzer ist abgelehnt."); } scanner.close(); } }

Es ich wichtig, dass wir als letzte Anweisung im Block der While-Schleife wieder eine Zeile Text einlesen. Würden wir dies vergessen, so hätten wir eine Endlosschleife.

Durch die Anweisung text = text + eingabe; wird die Eingabe an den zwischengespeicherten Text hinten angehängt. Dies funktionier, weil Java erst den rechten Teil also text + eingabe ausführt und erst danach das Ergebnis in die Variable text speichert. Es kommt sehr oft vor, dass man an eine Variable etwas anhängen möchte. Aus diesem Grund hat Java hierfür eine Kurzschreibweise 

text += eingabe;


While

Mit der While-Schleife wird ein Codeblock mehrfach ausgeführt.

 while( Wahrheitsaussage ) {
    Anweisung;
 }             

 ! (Nicht) Operator

Durch den Nicht-Operator “!” wird eine Aussage in das Gegenteil verwandelt. Der Operator wird vor die Aussage geschrieben.

Wir wollen uns noch eine andere Schreibweise anschauen, die genau das selbe ergebnis bring. Hierfür bauen wir die Schleife so um, dass sie immer wieder von vorne beginnt while(true){...}. Jetzt können wir in der Schleife den Text einlesen und sollte die Eingabe “quit” sein, so verlassen wir die Schleife mit dem Schlüsselwort break. Das geänderte Beispiel ist dann:


Scanner scanner = new Scanner(System.in); String text = ""; while (true) { String eingabe = scanner.next(); if(eingabe.equals("quit")) { break; } text += eingabe + "\n"; }
Break und Continue

Die Anweisung Break kann nur in einer Schleife verwendet werden. Durch sie wird Java aufgefordert die Schleife sofort zu verlassen. Alle Anweisungen, die im Schleifen-Block noch folgen, werden nicht mehr ausgeführt. Außerdem wird nicht wieder von vorne begonnen. Genau hier liegt der Unterschied zu der Anweisung Continue. Auch durch Continue wird der Rest des Schleifen-Blocks nicht mehr ausgeführt aber es wird erneut geprüft ob die Wahrheitsaussage noch wahr ist und die Schleife erneut ausgeführt werden kann.

Wir sollten an dieser Stelle noch auf eine mögliche Fehlerquelle. Im vorherigen Beispiel wurde die Variable “text” vor der Schleife deklariert. Das ist sehr wichtig, dann Variablen in Java existieren nur in dem Block in dem sie deklariert wurden und in Blöcken, die mit in ihrem eingebettet sind. Aus diesem Grund kann die Variable “text” auch in der Schleife verwendet werden. Wir sprechen hierbei vom Scope der Variable.

Die Variable “eingabe” existiert nur in dem Block der Schleife. Sie wir bei jedem Schleifendurchlauf neu deklariert und kann außerhalb des Schleifen-Blocks nicht verwendet werden.

Bei dem Einlesen einer Zeile mit scanner.next() wird das Zeilenende-Zeichen entfernt. Aus diesem Grund wird in dem Beispiel wieder ein Zeilenumbruch ("\n") angehängt. Zeilenumbrüche werden von Computern als normale Zeichen behandelt. Es gibt aber keine Taste und keine richtige Darstellung für diese Zeichen, darum werden sie im Quellcode durch zwei Zeichen dargestellt.

Mitlerweile ist der Quelltext schon etwas angewachsen und wir sollten uns langsam Gedanken über die Lesbarkeit machen. Einen Punkt der Lesbarkeit, die Einrückung, hatten wir bereits besprochen. Dieser Punkt ist so wichtig, dass Eclipse hierfür einen Automatismus bereitstellt. Durch die Tastenkombination Strg + Umschalt + F wird der Code automatisch formatiert. Die Einrückung ist wieder gerettet.

Einweiterer Aspekt der Lesbarkeit sind Kommentare. Kommentare sind Anmerkungen für den Programmier. Sie ändern das Verhalten des Programms nicht sondern werden vom Compiler ignoriert. Mit den Zeichen // wird alles, was bis Zum Ende einer Zeile folgt zu einem Kommentar. Alternativ können auch Blockkommentare /* Mehrere Zeilen Text */ geschrieben werden. Wie viel man kommentiert ist jedem selbst überlassen. Es empfiehlt sich aber, regelmäßig zu notieren warum man etwas gemacht hat. Was genau an einer Stelle geschieht, braucht man selten kommentieren, da dies ja durch den Quelltext dokumentiert ist. Unser Beispiel könnte mit Kommentaren wie folgt ergänzt werden:


 import java.util.Scanner;

 public class Tagebuch {

     public static void main(String[] args) {

         System.out.println("Wie heißt du?");

         Scanner scanner = new Scanner(System.in);

         String name = scanner.next();

         if (name.equals("Jan")) {
             System.out.println("Hallo " + name + "!");
             System.out.println("Bitte Text eingeben. Zum Beenden 'quit' eingeben.");

             // Schleife zum Einlesen des Textes
             String text = "";
             while (true) {
                 String eingabe = scanner.next();

                 // "quit" soll das Ende der Eingabe signalisieren
                 if (eingabe.equals("quit")) {
                     break;
                 }

                 text += eingabe + "\n";
             }

             System.out.println("Eingegeben wurde: " + text);

         } else {
             System.out.println("Der Benutzer ist abgelehnt.");
         }

         scanner.close();
     }
 }