Anweisungen:Javakurs

Aus Info-Theke
Zur Navigation springen Zur Suche springen


Übersicht

Theorie

In Java gibt es 6 verschieden allgemeine Anweisungen:

  • if-Statement: bedingte Ausführung
  • for-Statement: Wiederholte Ausführung mit Initialisierung, Bedingung und Weiterschaltung
  • while-Statement: Wiederholte Ausführung mit Bedingung am Anfang
  • do-while-Statement: Wiederholte Ausführung mit Bedingung am Ende
  • switch-Statement: Mehrfachverzweigung

Zusätzlich gibt es zwei Anweisungen, die nur in Schleifen (for, while) vorkommen dürfen:

  • break
  • continue

Anweisungsliste

Syntax

'{' { <statement> }* '}'

In den folgenden Kapiteln kommt oft der Begriff Anweisungsliste (statement list) vor. Damit ist eine einzelne Anweisung gemeint oder eine Folge von Anweisungen, die mit '{' und '}' umrahmt ist.

Ausnahme: im 'switch'-Statement ist keine Klammerung mit '{' und '}' notwendig.

If Statement

Syntax

'if' '(' <condition> ')' <true-statementlist> [ 'else' <false-statementlist> ]

Es wird die Bedingung ausgewertet: Ist die Bedingung true, wird die true-statementlist ausgeführt.

Liefert die Bedingung false und existiert eine false-statementlist, wird diese ausgeführt.

Beispiel

if ( temperature < 0 )
   System.out.println("ice warning!");
else if ( temperature > 100)
   System.out.println("steam warning!");
else
   System.out.println("water is fluid");


For Statement

Syntax

'for' '(' <initializing-statementlist> ';' <condition> ';' <stepping> ')' <body-statementlist>

Es wird die Initialisierung ausgeführt.

Danach wird solange die Rumpanweisungsliste ausgeführt, wie die Bedingung true liefert.

Nach jedem Ausführen der Rumpanweisungsliste wird die Fortschaltung ausgeführt.

Beispiel

// Berechne die Fakultät von 11:
int fac = 1;
for (int n = 1; n <= 11; n++)
   fac *= n;

While Statement

Syntax

'while' '(' <condition> ')' 'do' <statementlist>

Es wird die Bedingung ausgewertet:

Ist die Bedingung true, wird die statementlist ausgeführt und erneut die Bedingung ausgewertet.

Liefert die Bedingung false, wird das Statement beendet.

Beispiel

// Bestimme die größte Fakultät unter 100:
n = 1;
f = 1;
while(f < 100){
   f = f * n;
   n++;
}
System.out.println(String.format("n=%d fac=%d", n, f);

Do-While Statement

Syntax

'do' <statementlist> 'while'(' <condition> ')';

Es wird die Anweisungsliste ausgeführt.

Danach wird die Bedingung geprüft.

Ist die Bedingung true, wird die statementlist erneut ausgeführt und erneut die Bedingung ausgewertet.

Liefert die Bedingung false, wird das Statement beendet.

Beispiel

// Suche nach der ersten Fibunacci-Zahl größer 100
int f1 = f2 = 1;
int n = 2;
int f;
do {
   
   f = f1 + f2;
   f2 = f1;
   f1 = f;
   n++;
} while (f < 100);
System.out.println(String.format("n=%d fib=%d", n, f);

Switch Statement

Syntax

'switch '(' <selector> ')' '{' <cases>  '}'

<cases> ::= { <case> }+

<case> ::= <values> <statementlist> | 'default' ':'

<values> ::= { <value> }+

<value> ::= 'case' <constant> ':' | 'default' ':'

Es wird der Selektor ermittelt und mit allen Konstanten verglichen. Passt eine Konstante, wird die zugehörige Anweisungsliste ausgeführt, wenn nicht die Anwendungsliste hinter 'default', wenn vorhanden.

Alle Konstanten müssen verschieden sein. 'default' darf höchstens einmal vorkommen.

Kommt in einer Anweisungsliste der Befehl 'break' vor, wird die Abarbeitung des Switch-Statements abgebrochen. Normalerweise ist also das letzte Statement einer Anweisungsliste ein 'break;'

Beispiel

// Bestimme die Zeichenklasse eines Zeichens:
switch(cc){
case ' ':
   charClass = "blank"; 
   break;
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
   charClass = "digit";
   break;
default:
   charClass = "char";
   break;
}

Schleifenabbruch Break

Syntax

'break'

Die Schleife (for oder while) wird abgebrochen, also die Anweisung hinter der Schleife fortgesetzt.

'break' darf auch im Rumpf der 'switch'-Anweisung auftreten. Auch dort wird mit der Ausführung der Anweisung hinter dem 'switch' fortgesetzt.

Beispiel

// Wie oft muss man ein Papier falten, damit die Dicke die Erde-Mond-Entfernung übersteigt:
int depthInMillimeter = 1;
int n = 0;
for (int n=0;;n++, depthInMillimeter *= 2){
   if (depthInMillimeter > 300*1000*1000){
      System.out.println(String.format("n=%d", n);
      break;
   }
}

Schleifenabkürzung Continue

Syntax

'continue'

Die Abarbeitung des Schleifenrumpfes (in for oder while) wird abgebrochen, also die Bedingung der Schleife sofort überprüft.


Beispiel

// Sparplan: die ersten 3 Jahre 2% Zins, dann jedes Jahr ein Prozent mehr, bis 7 Jahre
// Ausgabe des Kapitals in den Jahren 1-7, Start mit 1000 EUR.
double asset = 1000; int rate = 2;
for (int n = 1; n <= 7; n++){
   asset = asset * (100 + rate);
   Sytem.out.println(String.format("%d: %.2f (%d %%)", n, asset, rate);
   if (n < 3)
      continue;
   rate += 1;
}

Aufgaben

  • Berechne die Summe der ersten 100 geraden Zahlen
  • Wie viele Jahre dauert es bei einem Zinssatz von 3%, bis das Kapital verdoppelt ist.
  • Ein Barkeeper bekommt Wochentags 10 Euro Stundenlohn, am Wochenende 15 EUR.
    • Er arbeitet jeden Wochentag, aber nur jedes 2.te Wochenende
    • Arbeitszeit ist jeweils 6 Stunden pro Abend
    • Gib eine Wochenlohnabrechnung für 2 Monate aus.
  • Gib die