14.01.2015 Aufrufe

Teil I Prozedurale Programmierung mit Java - Urz

Teil I Prozedurale Programmierung mit Java - Urz

Teil I Prozedurale Programmierung mit Java - Urz

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Java</strong>-Schulung<br />

<strong>Teil</strong> I<br />

<strong>Prozedurale</strong> <strong>Programmierung</strong> <strong>mit</strong> <strong>Java</strong><br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg () P–1


<strong>Java</strong>-Schulung<br />

Kapitel 2<br />

Bezeichner, Variablen, Kommentare<br />

2.1 Bezeichner<br />

Bezeichner (d. h. Namen) für Variablen, Methoden und Klassen sind in ihrem Aufbau an die<br />

Programmiersprachen C und C++ angelehnt.<br />

Erlaubt sind<br />

• Groß- und Kleinbuchstaben,<br />

• Ziffern (0, 1, 2, 3, 4, 5, 6, 7, 8, 9),<br />

• Unterstreichungsstrich (_),<br />

• Dollar-Zeichen ($) und<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000080.tex) P–2


<strong>Java</strong>-Schulung<br />

• alle Zeichen des Unicode-Zeichensatzes oberhalb 00C0<br />

als Bestandteile von Bezeichnern. Das erste Zeichen darf keine Ziffer sein und das Dollar-<br />

Zeichen ($) darf nur am Anfang stehen.<br />

Beispiel für erlaubte Bezeichner:<br />

kilometerstand<br />

kmstd<br />

zahl_1<br />

Beispiel für unerlaubte Bezeichner:<br />

kilometer-stand<br />

km/Std<br />

1_zahl<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000080.tex) P–3


<strong>Java</strong>-Schulung<br />

Folgende Namenskonventionen werden empfohlen:<br />

• Klassennamen: erster Buchstabe groß, restliche klein<br />

• Variablennamen: Kleinbuchstaben<br />

• Methodennamen: Kleinbuchstaben<br />

• Konstante Variablen: Großbuchstaben<br />

Des weiteren hat es sich eingebürgert, zusammengesetzte Namen in einer gemischten Schreibweise<br />

zu verwenden.<br />

Beispiel:<br />

kilometerStand<br />

kmStd<br />

zahlEins<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000080.tex) P–4


<strong>Java</strong>-Schulung<br />

2.2 Variablen<br />

Mittels Variablen können Daten im Hauptspeicher eines Rechners abgelegt werden. <strong>Java</strong> unterscheidet<br />

drei Arten von Variablen:<br />

• Lokale Variablen<br />

existieren nur innerhalb einer Methode oder eines Blocks und zwar nur so lange, bis das<br />

Ende der Methode oder des Blocks erreicht ist.<br />

• Klassenvariablen<br />

werden in einer Klassendefinition angelegt, sind aber unabhängig von Objekten. Sie existieren<br />

während der gesamten Laufzeit des Programms.<br />

• Objektvariablen<br />

werden durch eine Klassenbeschreibung definiert und bei erzeugen eines Objekts abgelegt.<br />

Sie existieren, solange das Objekt existiert.<br />

Variablen müssen vor ihrer ersten Verwendung initialisiert werden. In <strong>Java</strong> wird dies als Definite<br />

Assignment bezeichnet und vom Compiler erzwungen.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000090.tex) P–5


<strong>Java</strong>-Schulung<br />

Variablen werden deklariert, indem man ihren Datentyp und ihren Namen angibt:<br />

Syntax:<br />

datentyp variablenname<br />

bzw.<br />

datentyp variablenname_1, variablenname_2, ...<br />

Beispiel:<br />

int var_1;<br />

int var_2, var_3;<br />

double var_4;<br />

• Die Deklaration ist an unterschiedlichen Stellen im Programm möglich. Sie wird jedoch<br />

in der Regel zu Beginn eines Blocks vorgenommen.<br />

• Die Reichweite einer Variablen beginnt bei ihrer Deklaration und endet am Ende des<br />

Blocks, in dem sie deklariert wurde.<br />

• Es ist nicht möglich, Namen zu überlagern.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000090.tex) P–6


<strong>Java</strong>-Schulung<br />

Beispiel 1:<br />

1 public class Var001<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int a;<br />

6 a=1234;<br />

7 {<br />

8 int b;<br />

9 b=5678;<br />

10 System.out.println(a + " " + b);<br />

11 }<br />

12 System.out.println(a + " " + b);<br />

13 }<br />

14 }<br />

ergibt folgende Fehlermeldung:<br />

Var001.java:12: Undefined variable: b<br />

System.out.println(a + " " + b);<br />

^<br />

1 error<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000090.tex) P–7


<strong>Java</strong>-Schulung<br />

Beispiel 2:<br />

1 public class Var002<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int a;<br />

6 a=1234;<br />

7 {<br />

8 int a;<br />

9 a=5678;<br />

10 System.out.println(a);<br />

11 }<br />

12 System.out.println(a);<br />

13 }<br />

14 }<br />

ergibt folgende Fehlermeldung:<br />

Var002.java:8:Variable ’a’ is already defined in this method.<br />

int a;<br />

^<br />

1 error<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000090.tex) P–8


<strong>Java</strong>-Schulung<br />

2.2.1 Initialisierung von Variablen<br />

Eine Variable kann bei ihrer Deklaration direkt <strong>mit</strong> einem Wert initialisiert werden.<br />

Beispiel:<br />

int i=17;<br />

double d=3.14159;<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000090.tex) P–9


<strong>Java</strong>-Schulung<br />

2.2.2 Schlüsselworte<br />

<strong>Java</strong> definiert eine Reihe von Schlüsselworten, die man nicht als eigene Variablennamen verwenden<br />

darf:<br />

abstract boolean break byte byvalue case<br />

cast catch char class const continue<br />

default do double else extends false<br />

final finally float for future generic<br />

goto if implements import inner instanceof<br />

int interface long native new null<br />

operator outer package private protected public<br />

rest return short static super switch<br />

synchronized this threadsafe throw throws transient<br />

true try var void volatile while<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000082.tex) P–10


<strong>Java</strong>-Schulung<br />

2.3 Kommentare<br />

Kommentare dienen der besseren Übersichtlichkeit und bieten eine gewisse Sicherheit dafür,<br />

dass der Programmquellcode auch nach längerer Zeit vom Programmierer verstanden werden<br />

kann.<br />

<strong>Java</strong> bietet drei Alternativen Kommentare zu erstellen:<br />

• Zeilenkommentare,<br />

• Blockkommentare,<br />

• HTML-Kommentare, die in die Dokumentation, die <strong>mit</strong> dem Kommando javadoc generiert<br />

wird, übernommen werden sollen.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000084.tex) P–11


<strong>Java</strong>-Schulung<br />

2.3.1 Zeilenkommentare<br />

Zeilenkommentare erlauben die Eingabe eines Kommentars bis an das Zeilenende.<br />

Der Kommentar wird durch den Befehl // eingeleitet, das Ende ist das Zeilenende.<br />

Zeilenkommentare sind hilfreich, wenn lediglich kurze Anmerkungen zum Programmcode<br />

gemacht werden sollen.<br />

Beispiel 1:<br />

Beispiel 2:<br />

// Länge eines Marathonlaufs in Kilometer<br />

...<br />

// Länge eines Marathonlaufs<br />

// Berechnet wird bei Angabe von Meilen und Yards<br />

// die Länge in Kilometer<br />

...<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000084.tex) P–12


<strong>Java</strong>-Schulung<br />

2.3.2 Blockkommentare<br />

Diese Variante ist der Programmiersprache C entliehen. Die Kommentare können beliebig<br />

lang sein.<br />

Der Kommentar wird durch die Befehle /* und */ eingeschlossen.<br />

Nach Beginn des Kommentars durch /* kann jedes beliebige Zeichen folgen. Nur das Zeichen<br />

* bildet eine Ausnahme (siehe dazu HTML-Kommentare). Der Kommentar endet erst<br />

wieder <strong>mit</strong> der Zeichenfolge */.<br />

Kommentare dieser Form dürfen keine Kommentare der gleichen Form enthalten, während<br />

andere Kommentarzeichen nicht als solche behandelt werden.<br />

Beispiel:<br />

/* Ziel dieses Kommentars ist es, die Anwendung eines<br />

Blockkommentars zu demonstrieren, der sich über<br />

mehrere Zeilen erstreckt. */<br />

...<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000084.tex) P–13


<strong>Java</strong>-Schulung<br />

2.3.3 HTML-Kommentare<br />

Das Verbot des Zeichens * nach dem Einleiten des Kommentars hat eine besondere Bedeutung.<br />

Hierdurch wird eine Art von Kommentar eingeleitet, der zur Generierung einer automatischen<br />

Dokumentation <strong>mit</strong>tels javadoc verwendet wird. javadoc überprüft den Quellcode<br />

auf das Vorhandensein des Dokumentationskommentars (/**) und generiert daraus eine<br />

Dokumentation im HTML-Format.<br />

public class test6<br />

{<br />

/**<br />

Dieser Kommentar ist für die HTML-Dokumentation. Ziel ist<br />

die Darstellung eines HTML-Kommentars. Er kann über<br />

einen längeren Text gehen. Die erste Satz wird in die<br />

’Method Summary’ übernommen.<br />

*/<br />

public static void main(String args[])<br />

{<br />

System.out.println("Das ist ein Test.");<br />

}<br />

}<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000084.tex) P–14


<strong>Java</strong>-Schulung<br />

Class Tree Deprecated Index Help<br />

PREV CLASS NEXT CLASS<br />

SUMMARY: INNER | FIELD | CONSTR | METHOD<br />

FRAMES NO FRAMES<br />

DETAIL: FIELD | CONSTR | METHOD<br />

Class test6<br />

java.lang.Object<br />

|<br />

+--test6<br />

public class test6<br />

extends java.lang.Object<br />

Constructor Summary<br />

test6()<br />

Method Summary<br />

static void main(java.lang.String[] args)<br />

Dieser Kommentar ist für die HTML-Dokumentation.<br />

Methods inherited from class java.lang.Object<br />

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait,<br />

wait, wait<br />

Constructor Detail<br />

test6<br />

public test6()<br />

Method Detail<br />

main<br />

public static void main(java.lang.String[] args)<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000084.tex) P–15


<strong>Java</strong>-Schulung<br />

Kapitel 3<br />

Datentypen und Konstanten<br />

3.1 Datentypen<br />

In <strong>Java</strong> unterscheidet man einfache und zusammengesetzte Datentypen. Einfache Datentypen<br />

sind Zahlen, Zeichen, Wahrheitswerte – zusammengesetzte sind Zeichenketten, Felder,<br />

Klassen. Die verschiedenen Datentypen benötigen unterschiedlichen Speicherplatz.<br />

Die Datentypen sind denen von C und C++ sehr ähnlich, es gibt aber einige wichtige Unterschiede:<br />

• alle Datentypen sind auf jedem Computer von konstanter Größe,<br />

• alle numerischen Variablen sind vorzeichenbehaftet,<br />

• es sind nicht beliebige automatische Typumwandlungen möglich.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–16


<strong>Java</strong>-Schulung<br />

3.1.1 Ganze Zahlen<br />

1. byte<br />

Größe: 8 bit (1 Byte),<br />

Bereich: −128 bis 127<br />

2. short<br />

Größe: 16 bit (2 Byte),<br />

Bereich: −32 768 bis 32 767<br />

3. int<br />

Größe: 32 bit (4 Byte),<br />

Bereich: −2 147 483 648 bis 2 147 483 647<br />

4. long<br />

Größe: 64 bit (8 Byte),<br />

Bereich: −9 223 372 036 854 775 808 bis 9 223 372 036 854 775 807<br />

Ganze Zahlen sind exakt und intern im binären Datenformat gespeichert.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–17


<strong>Java</strong>-Schulung<br />

Den Zahlenbereich der einzelnen Datentypen erhält man, wenn man die Werte folgender Konstanten<br />

ausgibt:<br />

• Beim Datentyp byte<br />

Byte.MIN_VALUE<br />

Byte.MAX_VALUE<br />

• Beim Datentyp short<br />

Short.MIN_VALUE<br />

Short.MAX_VALUE<br />

• Beim Datentyp int<br />

Integer.MIN_VALUE<br />

Integer.MAX_VALUE<br />

• Beim Datentyp long<br />

Long.MIN_VALUE<br />

Long.MAX_VALUE<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–18


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Lim_gz<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 System.out.println("Minimum und Maximum bei Byte:\n" +<br />

6 Byte.MIN_VALUE + ", " +<br />

7 Byte.MAX_VALUE + "\n");<br />

8 System.out.println("Minimum und Maximum bei Short:\n" +<br />

9 Short.MIN_VALUE + ", " +<br />

10 Short.MAX_VALUE + "\n");<br />

11 System.out.println("Minimum und Maximum bei Integer:\n" +<br />

12 Integer.MIN_VALUE + ", " +<br />

13 Integer.MAX_VALUE + "\n");<br />

14 System.out.println("Minimum und Maximum bei Long:\n" +<br />

15 Long.MIN_VALUE + ", " +<br />

16 Long.MAX_VALUE + "\n");<br />

17<br />

18 System.exit(0);<br />

19 }<br />

20 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–19


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

Minimum und Maximum bei Byte:<br />

-128, 127<br />

Minimum und Maximum bei Short:<br />

-32768, 32767<br />

Minimum und Maximum bei Integer:<br />

-2147483648, 2147483647<br />

Minimum und Maximum bei Long:<br />

-9223372036854775808, 9223372036854775807<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–20


<strong>Java</strong>-Schulung<br />

3.1.2 Ausgabe von ganzen Zahlen<br />

Um ganze Zahlen auszugeben, müssen diese in Zeichenketten umgewandelt werden. Es stehen<br />

nachfolgend beschriebene Methoden zur Verfügung.<br />

3.1.2.1 Datentyp Integer<br />

Integer.toString(n)<br />

Integer.toBinaryString(n)<br />

Integer.toHexString(n)<br />

Integer.toOctalString(n)<br />

Umwandlung ins Dezimalzahlensystem<br />

Umwandlung ins Dualzahlensystem<br />

Umwandlung ins Hexadezimalzahlensystem<br />

Umwandlung ins Oktalzahlensystem<br />

n ist die ganze Zahl, die umgewandelt werden soll.<br />

Bei der Ausgabe an den Bildschirm wird die Methode Integer.toString implizit aufgerufen.<br />

Beispiel:<br />

1 public class ConvInt<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i = 123456789;<br />

6 System.out.println("Dezimal: " + i);<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–21


<strong>Java</strong>-Schulung<br />

7 System.out.println("Dezimal: " +<br />

8 Integer.toString(i));<br />

9 System.out.println("Binär: " +<br />

10 Integer.toBinaryString(i));<br />

11 System.out.println("Oktal: " +<br />

12 Integer.toOctalString(i));<br />

13 System.out.println("Hexadezimal: " +<br />

14 Integer.toHexString(i));<br />

15 System.exit(0);<br />

16 }<br />

17 }<br />

Als Ausgabe erhält man:<br />

Dezimal: 123456789<br />

Dezimal: 123456789<br />

Binär: 111010110111100110100010101<br />

Oktal: 726746425<br />

Hexadezimal: 75bcd15<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–22


<strong>Java</strong>-Schulung<br />

3.1.2.2 Datentyp Long<br />

Long.toString(n)<br />

Long.toBinaryString(n)<br />

Long.toHexString(n)<br />

Long.toOctalString(n)<br />

Umwandlung ins Dezimalzahlensystem<br />

Umwandlung ins Dualzahlensystem<br />

Umwandlung ins Hexadezimalzahlensystem<br />

Umwandlung ins Oktalzahlensystem<br />

n ist die ganze Zahl, die umgewandelt werden soll.<br />

Bei der Ausgabe an den Bildschirm wird die Methode Long.toString implizit aufgerufen.<br />

Beispiel:<br />

1 public class ConvLong<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 long i = 987654321;<br />

6 System.out.println("Dezimal: " + i);<br />

7 System.out.println("Dezimal: " +<br />

8 Long.toString(i));<br />

9 System.out.println("Binär: " +<br />

10 Long.toBinaryString(i));<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–23


<strong>Java</strong>-Schulung<br />

11 System.out.println("Oktal: " +<br />

12 Long.toOctalString(i));<br />

13 System.out.println("Hexadezimal: " +<br />

14 Long.toHexString(i));<br />

15 System.exit(0);<br />

16 }<br />

17 }<br />

Als Ausgabe erhält man:<br />

Dezimal: 987654321<br />

Dezimal: 987654321<br />

Binär: 111010110111100110100010110001<br />

Oktal: 7267464261<br />

Hexadezimal: 3ade68b1<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–24


<strong>Java</strong>-Schulung<br />

3.1.2.3 Datentyp Byte<br />

Byte.toString(n)<br />

Umwandlung ins Dezimalzahlensystem<br />

n ist die ganze Zahl, die umgewandelt werden soll.<br />

Bei der Ausgabe an den Bildschirm wird die Methode Byte.toString implizit aufgerufen.<br />

Beispiel:<br />

1 public class ConvByte<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 byte i = 123;<br />

6 System.out.println("Dezimal: " + i +<br />

7 " und " + Byte.toString(i));<br />

8 System.exit(0);<br />

9 }<br />

10 }<br />

Als Ausgabe erhält man:<br />

Dezimal: 123 und 123<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–25


<strong>Java</strong>-Schulung<br />

3.1.2.4 Datentyp Short<br />

Short.toString(n)<br />

Umwandlung ins Dezimalzahlensystem<br />

n ist die ganze Zahl, die umgewandelt werden soll.<br />

Bei der Ausgabe an den Bildschirm wird die Methode Short.toString implizit aufgerufen.<br />

Beispiel:<br />

1 public class ConvShort<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 short i = 12345;<br />

6 System.out.println("Dezimal: " + i +<br />

7 " und " + Short.toString(i));<br />

8 System.exit(0);<br />

9 }<br />

10 }<br />

Als Ausgabe erhält man:<br />

Dezimal: 12345 und 12345<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–26


<strong>Java</strong>-Schulung<br />

3.1.3 Gleitkomma-Zahlen (Gleitpunkt-Zahlen)<br />

1. float<br />

Größe: 32 bit (4 Byte)<br />

Bereich: 1,4 · 10 −45 bis 3,4 · 10 38<br />

Genauigkeit: 6 Dezimalstellen<br />

2. double<br />

Größe: 64 bit (8 Byte),<br />

Bereich: 4,9 · 10 −324 bis 1,7 · 10 308<br />

Genauigkeit: 15 Dezimalstellen<br />

• Gleitkommazahlen sind in der Regel <strong>mit</strong> Darstellungsfehlern behaftet.<br />

• Beim Rechnen <strong>mit</strong> Gleitkommazahlen ergeben sich Rundungsfehler.<br />

• Gleitkommazahlen werden im Standard IEEE 754-Format im Rechner gespeichert.<br />

Den Zahlenbereich erhält man, wenn man die Werte der Konstanten ausgibt:<br />

Float.MIN_VALUE<br />

Float.MAX_VALUE<br />

Double.MIN_VALUE<br />

Double.MAX_VALUE<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–27


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Lim_gl<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 System.out.println(Float.MIN_VALUE + ", " +<br />

6 Float.MAX_VALUE);<br />

7 System.out.println(Double.MIN_VALUE + ", " +<br />

8 Double.MAX_VALUE);<br />

9 System.exit(0);<br />

10 }<br />

11 }<br />

Als Ausgabe erhält man:<br />

1.4E-45, 3.4028235E38<br />

4.9E-324, 1.7976931348623157E308<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–28


<strong>Java</strong>-Schulung<br />

3.1.4 Boolsche Zahlen<br />

boolean<br />

Größe: 8 bit (1 Byte),<br />

Bereich: true und false<br />

Es werden ihnen keine Zahlen zugeordnet, wie beispielsweise Null (0) für false oder<br />

„jeder Wert ungleich Null“ für true. Sie können auch nicht in andere Datentypen umgewandelt<br />

werden.<br />

3.1.5 Zeichen<br />

char<br />

Größe: 16 bit (2 Byte),<br />

<strong>Java</strong> verwendet den Unicode zur Zeichendarstellung (http://unicode.com).<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000070.tex) P–29


<strong>Java</strong>-Schulung<br />

3.2 Datentyp-Umwandlungen<br />

Typ-Umwandlungen wandeln einen Datentyp in einen anderen um. Diesen Vorgang bezeichnet<br />

man als Casting.<br />

Syntax:<br />

Beispiel:<br />

(datentyp) ausdruck<br />

int a=1, b=2; float f;<br />

f = (float) a / (float) b;<br />

Außer dem expliziten Casting gibt es noch das implizite Casting, bei dem der Compiler selbst<br />

den Datentyp konvertiert. Auch hierbei kann es zu unerwünschten Seiteneffekten kommen.<br />

<strong>Java</strong> ist restriktiv in bezug auf die Konvertierung von Werten eines Datentyps in einen anderen.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000096.tex) P–30


<strong>Java</strong>-Schulung<br />

3.2.1 Aufwand für Konvertierungen<br />

nach<br />

Datentyp byte short char int long float double<br />

byte 0 1 2 3 4 7 8<br />

short A 0 A 1 2 5 6<br />

von char B A 0 1 2 5 6<br />

int C B A 0 1 4 5<br />

long D C B A 0 3 4<br />

float G F E D C 0 1<br />

double H G F E D A 0<br />

• Bei den Kombinationen, die durch Buchstaben gekennzeichnet sind, geht bei der Konvertierung<br />

Information verloren. Diese Konvertierungen müssen <strong>mit</strong> dem cast-Operator<br />

erzwungen werden.<br />

• Bei der Konvertierung wird immer die Kombination gewählt, die den geringsten Aufwand<br />

erfordert (je höher die Zahl oder der Buchstabe, desto höher der Aufwand).<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000096.tex) P–31


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Cast01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i=1,j=2;<br />

6<br />

7 System.out.println(1/2 + " " + 1./2.);<br />

8 System.out.println(i/j + " " + (float)i/(float)j);<br />

9 System.out.println((float)1/(float)2);<br />

10 System.exit(0);<br />

11 }<br />

12 }<br />

Als Ausgabe erhält man:<br />

0 0.5<br />

0 0.5<br />

0.5<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000096.tex) P–32


<strong>Java</strong>-Schulung<br />

3.3 Literale<br />

Literale (Konstanten) dienen zum Bezeichnen einfacher Werte in einem <strong>Java</strong>-Programm.<br />

Obwohl sie meist selbsterklärend sind, gibt es innerhalb von <strong>Java</strong> einige Besonderheiten für<br />

die unterschiedlichen Arten von<br />

• Ganzzahligen Konstanten,<br />

• Gleitkomma-Konstanten,<br />

• Zeichen-Konstanten,<br />

• Zeichenketten-Konstanten,<br />

• Boolschen Konstanten.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000078.tex) P–33


<strong>Java</strong>-Schulung<br />

3.3.1 Ganzzahlige Konstanten<br />

• Sie sind standardmäßig vom Datentyp int.<br />

• Den Datentyp long kann man immer erhalten, wenn man an die Zahl den Buchstaben<br />

L oder l anhängt.<br />

• Ganzzahlige Konstanten kann man auch oktal bzw. hexadezimal ausdrücken. Eine führende<br />

0 zeigt an, daß eine Zahl oktal ist. Ein vorangestelltes 0x oder 0X bedeutet, daß<br />

es sich um eine Hexadezimalzahl handelt.<br />

Beispiel:<br />

1234 // int<br />

5000000000 // long<br />

1234L<br />

// long<br />

0777 // oktal<br />

0xAD3F<br />

// hexadezimal<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000078.tex) P–34


<strong>Java</strong>-Schulung<br />

3.3.2 Gleitkomma-Konstanten<br />

• Als Gleitkomma-Konstanten werden, – dem Standard IEEE 754 gemäß – Werte <strong>mit</strong><br />

einfacher (float) und doppelter Genauigkeit (double) angeboten.<br />

• Sie sind standardmäßig vom Datentyp double.<br />

• Gleitkommazahlen können <strong>mit</strong> einem Suffix f bzw. F für float und d bzw. D für<br />

double gekennzeichnet werden.<br />

• Es existiert der Wert -0.0 (negative Null), der entweder durch Initialisierung oder durch<br />

besondere Umstände erreicht werden kann. Multiplikation und Division durch -0.0<br />

ergeben wieder -0.0. Bei anderen Operationen verhält sich -0.0 wie 0.0<br />

Beispiel:<br />

1234.45 // doppelt genau<br />

1234.45f // einfach genau<br />

1234.45d // doppelt genau<br />

1234.45E-67<br />

// <strong>mit</strong> Exponent<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000078.tex) P–35


<strong>Java</strong>-Schulung<br />

3.3.3 Zeichen-Konstanten<br />

• Zeichen-Konstanten sind einzelne Zeichen, die in einfache Hochkommata eingeschlossen<br />

werden.<br />

• Sie sind standardmäßig vom Datentype char.<br />

• <strong>Java</strong> verwendet Unicode zur Zeichendarstellung.<br />

Beispiel:<br />

’a’<br />

// Ein Zeichen<br />

’ ’ // Ein Leerzeichen<br />

’0’ // Das Zeichen Null<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000078.tex) P–36


<strong>Java</strong>-Schulung<br />

3.3.4 Zeichenketten-Konstanten<br />

• Mehrere Zeichen zusammen bilden eine Zeichenkette.<br />

• Sie werden in doppelte Hochkommata eingeschlossen.<br />

• Sie können Konstanten wie neue Zeile, Tabulator- und Unicode-Zeichen enthalten.<br />

Beispiel:<br />

"Ich bin eine Zeichenkette." // Zeichenkette<br />

"" // Leere Zeichenkette<br />

"\n"<br />

// Neue Zeile<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000078.tex) P–37


<strong>Java</strong>-Schulung<br />

3.3.5 Boolsche Konstanten<br />

• Boolsche Konstanten sind true und false.<br />

• Sie werden bei den Operatoren<br />

– Gleichheit und Ungleichheit sowie bei<br />

– Konjunktion, Disjunktion und Negation<br />

verwendet<br />

• Sie sind die einzig möglichen Werte für boolsche Variablen.<br />

Beispiel:<br />

true<br />

false<br />

// wahr<br />

// falsch<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000078.tex) P–38


<strong>Java</strong>-Schulung<br />

Kapitel 4<br />

Operatoren<br />

4.1 Zuweisungsoperator (=)<br />

Syntax:<br />

variable = ausdruck<br />

• Der Variablen auf der linken Seite des Zuweisungsoperators wird der Wert zugewiesen,<br />

den der Ausdruck auf der rechten Seite liefert.<br />

• Der Ausdruck wird vollständig ausgewertet, bevor die Zuweisung durchgeführt wird.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000100.tex) P–39


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

x = a + b;<br />

y = y + 25;<br />

z = 2 * (a + b);<br />

• Da ein Zuweisungsoperator einen Wert ergibt, kann man Zuweisungsoperatoren verketten.<br />

Beispiel:<br />

x = y = z = 100;<br />

• Der Zuweisungsoperator ist kein mathematisches Gleichheitszeichen.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000100.tex) P–40


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Aust01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int v1, v2, h;<br />

6<br />

7 v1 = Integer.valueOf(args[0]).intValue();<br />

8 v2 = Integer.valueOf(args[1]).intValue();<br />

9<br />

10 System.out.println("Vor dem Tauschen: \n\n" +<br />

11 " v1: " + v1 + "\n v2: " + v2 + "\n");<br />

12 h=v1;<br />

13 v1=v2;<br />

14 v2=h;<br />

15<br />

16 System.out.println("Nach dem Tauschen: \n\n" +<br />

17 " v1: " + v1 + "\n v2: " + v2 + "\n");<br />

18 System.exit(0);<br />

19 }<br />

20 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000100.tex) P–41


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

Vor dem Tauschen:<br />

v1: 10<br />

v2: 20<br />

Nach dem Tauschen:<br />

v1: 20<br />

v2: 10<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000100.tex) P–42


<strong>Java</strong>-Schulung<br />

4.2 Arithmetische Operatoren<br />

<strong>Java</strong> besitzt fünf Operatoren für die Arithmetik:<br />

+ Addition 3 + 4<br />

− Subtraktion 9 - 6<br />

* Multiplikation 7 * 8<br />

/ Division 9 / 2<br />

% Modulus 9 % 4<br />

• Jeder Operator besitzt zwei Operanden, je einen auf jeder Seite des Operators.<br />

• Der Subtraktionsoperator kann auch zum Negieren eines einzelnen Operanden benutzt<br />

werden.<br />

• Die Division einer ganzen Zahl durch eine ganze Zahl ergibt wiederum eine ganze Zahl.<br />

• Der Modulus gibt den Divisionsrest einer ganzzahligen Division. Beispielsweise ergibt<br />

33 % 9 die Zahl 6, da 9 in 33 dreimal enthalten ist und den Rest 6 ergibt.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000110.tex) P–43


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Beisp04<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int var_1=50, var_2=20,<br />

6 var_3, var_4, var_5, var_6, var_7;<br />

7<br />

8 var_3 = var_1 + var_2;<br />

9 var_4 = var_1 - var_2;<br />

10 var_5 = var_1 * var_2;<br />

11 var_6 = var_1 / var_2;<br />

12 var_7 = var_1 % var_2;<br />

13 System.out.println(var_3 + " " + var_4 + " " +<br />

14 var_5 + " " + var_6 + " " + var_7);<br />

15<br />

16 System.exit(0);<br />

17 }<br />

18 }<br />

Als Ausgabe erhält man:<br />

70 30 1000 2 10<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000110.tex) P–44


<strong>Java</strong>-Schulung<br />

• Alle arithmetischen ganzzahligen Operationen werden <strong>mit</strong> 32 Bit Genauigkeit ausgeführt,<br />

im Falle langer ganzer Zahlen long <strong>mit</strong> 64 Bit.<br />

• Möchte man ein ganzzahliges 32- oder 64-Bit-Ergebnis in eine kleinere Variable abspeichern,<br />

muss es in den entsprechenden Datentyp konvertiert werden.<br />

• byte- und short-Zuweisungen müssen immer angepasst werden, wenn sie das Ergebnis<br />

einer arithmetischen Operation sind.<br />

Beispiel:<br />

byte a, b=2, c=100;<br />

a = (byte) (b + c);<br />

• Ist das Ergebnis zu groß, werden nur die niederwertigen Bits gespeichert, d. h. die Ganzzahl-Arithmetik<br />

ist in Wirklichkeit eine Modulo-2 n -Arithmetik.<br />

• Ein Fehler wird nur bei Division durch Null angezeigt.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000110.tex) P–45


<strong>Java</strong>-Schulung<br />

Beispiel Zahlenkreis:<br />

1 public class Beisp05<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 byte zahl=0;<br />

6<br />

7 System.out.println("(1): " + zahl);<br />

8 zahl = (byte)(zahl + 127);<br />

9 System.out.println("(2): " + zahl);<br />

10 zahl = (byte)(zahl + 1);<br />

11 System.out.println("(3): " + zahl);<br />

12 zahl = (byte)(zahl + 127);<br />

13 System.out.println("(4): " + zahl);<br />

14 zahl = (byte)(zahl + 1);<br />

15 System.out.println("(5): " + zahl);<br />

16<br />

17 System.exit(0);<br />

18 }<br />

19 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000110.tex) P–46


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

(1): 0<br />

(2): 127<br />

(3): -128<br />

(4): -1<br />

(5): 0<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000110.tex) P–47


<strong>Java</strong>-Schulung<br />

4.2.1 Arithmetik von Gleitkommazahlen<br />

• Die Operationen sind Addition, Subtraktion, Multiplikation und Division.<br />

• Eine Division durch Null ergibt keinen Fehler.<br />

Beispiel:<br />

1 /* Länge des Marathonlaufs in Kilometer */<br />

2 public class Beisp03b<br />

3 {<br />

4 public static void main(String args[])<br />

5 {<br />

6 int meilen,yards;<br />

7 double kilometer;<br />

8<br />

9 meilen=26;<br />

10 yards=385;<br />

11<br />

12 kilometer=1.609*(meilen+yards/1760.0);<br />

13 System.out.println("Die Länge des Marathonlaufs " +<br />

14 "beträgt " + kilometer + " km.");<br />

15 System.exit(0);<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000110.tex) P–48


<strong>Java</strong>-Schulung<br />

16 }<br />

17 }<br />

Als Ausgabe erhält man:<br />

Die Länge des Marathonlaufs beträgt 42.18596875 km.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000110.tex) P–49


<strong>Java</strong>-Schulung<br />

4.2.2 Verkürzte Schreibweisen<br />

<strong>Java</strong> unterstützt ebenfalls die Kurzschreibweise arithmetischer Ausdrücke. Da relativ oft die<br />

Form<br />

operand 1 = operand 1 operator operand 2<br />

auftritt, wird vorzugsweise die verkürzte Schreibweise<br />

eingesetzt.<br />

operand 1 operator = operand 2<br />

Angewendet wird diese Schreibweise bei folgenden Operatoren:<br />

Symbol Operation Kurzform Langform<br />

+ Addition n += 10 n = n + 10<br />

− Subtraktion n -= 10 n = n - 10<br />

* Multiplikation n *= 10 n = n * 10<br />

/ Division n /= 10 n = n / 10<br />

% Modulus n %= 10 n = n % 10<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000120.tex) P–50


<strong>Java</strong>-Schulung<br />

4.2.3 Inkrement- und Dekrement-Operatoren<br />

<strong>Java</strong> unterstützt wie C bzw. C++ die Inkrementierung und Dekrementierung von Variablen.<br />

Da relativ oft die Form<br />

operand = operand + 1;<br />

bzw.<br />

auftritt, wird die verkürzte Schreibweise<br />

operand = operand - 1;<br />

operand ++; oder ++ operand;<br />

bzw.<br />

benutzt.<br />

operand --; oder -- operand;<br />

• Diese Operatoren können auch bei Gleitkommazahlen verwendet werden.<br />

• Die Operatoren können vorangestellt oder auch angefügt werden, wenn es sich um einfache<br />

Inkrement- oder Dekrement-Operationen handelt.<br />

• In Kombination <strong>mit</strong> anderen Operationen ergibt sich allerdings bei der Auswertung ein<br />

Unterschied.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000120.tex) P–51


<strong>Java</strong>-Schulung<br />

4.2.3.1 Prefix- und Postfix-Schreibweise<br />

Wird der Befehl ++ bzw. -- vorangestellt, wird zuerst diese Operation ausgeführt, anschließend<br />

die andere Operation.<br />

Wird der Befehl ++ bzw. -- nachgestellt, wird zuerst die andere Operation ausgeführt, anschließend<br />

das Inkrement bzw. Dekrement.<br />

Beispiel:<br />

x=++i;<br />

y=--j;<br />

wird wie folgt ausgeführt:<br />

i=i+1;<br />

x=i;<br />

j=j-1;<br />

y=j;<br />

Beispiel:<br />

x=i++;<br />

y=j--;<br />

wird wie folgt ausgeführt:<br />

x=i;<br />

i=i+1;<br />

y=j;<br />

j=j-1;<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000120.tex) P–52


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Oper01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int var_1=10, var_2=20;<br />

6 float var_3=5.4321F, var_4=1.2345F;<br />

7<br />

8 var_1 *= var_2;<br />

9 System.out.println("var_1: " + var_1);<br />

10 var_2++;<br />

11 System.out.println("var_2: " + var_2);<br />

12 var_3--;<br />

13 System.out.println("var_3: " + var_3);<br />

14 var_3 = ++var_4;<br />

15 System.out.println("var_4: " + var_4);<br />

16<br />

17 System.exit(0);<br />

18 }<br />

19 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000120.tex) P–53


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

var_1: 200<br />

var_2: 21<br />

var_3: 4.4321<br />

var_4: 2.2345<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000120.tex) P–54


<strong>Java</strong>-Schulung<br />

4.3 Vergleichsoperatoren<br />

• <strong>Java</strong> stellt mehrere Ausdrücke zum Testen von Gleichheit und Größe zur Verfügung<br />

• Alle diese Ausdrücke geben einen boolschen Wert (true oder false) zurück.<br />

• Die Vergleichsoperatoren sind:<br />

Operator Bedeutung Beispiel<br />

== Gleich a == 10<br />

!= Ungleich a != 10<br />

< Kleiner als a < 10<br />

> Größer als a > 10<br />

= 10<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–55


<strong>Java</strong>-Schulung<br />

4.4 Logische Operatoren<br />

• Boolsche Ausdrücke können entweder wahr (true) oder falsch (false) sein.<br />

• Sie sind keine Zahlen und man darf ihnen auch keine Zahlen zuweisen.<br />

• Die logischen Operatoren sind:<br />

Operator Bedeutung<br />

&&<br />

Und<br />

|| Oder<br />

! Negation<br />

&<br />

logisches Und<br />

| logisches Oder<br />

ˆ<br />

logisches Exklusiv-Oder<br />

• Für Und-Verknüpfungen wird && und & verwendet. Mit & werden beide Seiten des Ausdrucks<br />

ungeachtet des Ergebnisses ausgewertet. Mit && wird der ganze Ausdruck als<br />

falsch angenommen, wenn die linke Seite falsch ist.<br />

• Für Oder-Verknüpfungen wird || und | verwendet. Mit | werden beide Seiten des<br />

Ausdrucks ungeachtet des Ergebnisses ausgewertet. Mit || wird der ganze Ausdruck<br />

als wahr angenommen, wenn die linke Seite wahr ist.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–56


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Logi01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int a=0,b=2,c=3,x=0,y=4,z=5;<br />

6 boolean aa;<br />

7<br />

8<br />

9 // UND-Verknüpfung <strong>mit</strong> &:<br />

10<br />

11 aa=(a=b+c)


<strong>Java</strong>-Schulung<br />

21 // UND-Verknüpfung <strong>mit</strong> &&:<br />

22<br />

23 aa=(a=b+c)


<strong>Java</strong>-Schulung<br />

4.4.1 Wahrheitstafeln<br />

4.4.1.1 Und-Operator (&& und &)<br />

Operand 1 Operand 2 Ergebnis<br />

wahr wahr wahr<br />

wahr falsch falsch<br />

falsch wahr falsch<br />

falsch falsch falsch<br />

• Der Ausdruck ist nur dann wahr, wenn beide Operanden auf beiden Seiten des Operators<br />

wahr sind.<br />

• Ist ein Operand falsch, ist der gesamte Ausdruck falsch.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–59


<strong>Java</strong>-Schulung<br />

4.4.1.2 Oder-Operator (|| und |)<br />

Operand 1 Operand 2 Ergebnis<br />

wahr wahr wahr<br />

wahr falsch wahr<br />

falsch wahr wahr<br />

falsch falsch falsch<br />

• Der Ausdruck ist nur dann falsch, wenn beide Operanden auf beiden Seiten des Operators<br />

falsch sind.<br />

• Ist ein Operand wahr, ist der gesammte Ausdruck wahr.<br />

4.4.1.3 Nicht-Operator (!)<br />

Operand<br />

wahr<br />

falsch<br />

Ergebnis<br />

falsch<br />

wahr<br />

• Ist der Operand wahr, ist der Ausdruck falsch, und umgekehrt.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–60


<strong>Java</strong>-Schulung<br />

4.4.1.4 Exklusiv-Oder-Operator (ˆ)<br />

Operand 1 Operand 2 Ergebnis<br />

wahr wahr falsch<br />

wahr falsch wahr<br />

falsch wahr wahr<br />

falsch falsch falsch<br />

• Der Ausdruck ist nur dann wahr, wenn beide Operanden unterschiedlich sind (einer ist<br />

wahr und der andere ist falsch).<br />

• Sind beide Operanden gleich (beide sind wahr oder beide sind falsch), ist der Ausdruck<br />

falsch.<br />

Im allgemeinen werden nur && und || häufig als logische Operatoren benutzt, & und | werden<br />

normalerweise für bitweise logische Operationen verwendet.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–61


<strong>Java</strong>-Schulung<br />

4.4.2 Bitweise Operatoren<br />

Es gibt drei Gruppen von Operatoren zur Verarbeitung von Bits:<br />

1. die Verschiebungsoperatoren,<br />

2. der Negationsoperator,<br />

3. die binären Operatoren.<br />

• Bei allen Operatoren müssen die Bitfolgen einen ganzahligen Typ besitzen.<br />

• Gleitkommawerte können nicht angesprochen werden.<br />

• Die Operatoren wurden von C/C++ übernommen.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–62


<strong>Java</strong>-Schulung<br />

4.4.2.1 Die Verschiebungsoperatoren<br />

Operator Bedeutung<br />

> Verschiebung nach rechts<br />

>>> Verschiebung nach rechts <strong>mit</strong> Füllnullen<br />

• Bei der Verschiebung <strong>mit</strong> >2 entspricht der Division durch 4,<br />

usw.)<br />

• Bei der Verschiebung <strong>mit</strong> >>> nach rechts werden die freien Stellen links <strong>mit</strong> Nullen<br />

aufgefüllt.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–63


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Shft01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i,x,y,z,t;<br />

6<br />

7 i = Integer.valueOf(args[0]).intValue();<br />

8 x = i 2;<br />

11 t = i >>> 3;<br />

12<br />

13 System.out.println(i + ", " + Integer.toBinaryString(i));<br />

14 System.out.println(x + ", " + Integer.toBinaryString(x));<br />

15 System.out.println(y + ", " + Integer.toBinaryString(y));<br />

16 System.out.println(z + ", " + Integer.toBinaryString(z));<br />

17 System.out.println(t + ", " + Integer.toBinaryString(t));<br />

18 System.exit(0);<br />

19 }<br />

20 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–64


<strong>Java</strong>-Schulung<br />

ergibt bei dem Aufruf<br />

java Shft01 512<br />

als Ausgabe am Bildschirm:<br />

512, 1000000000<br />

1024, 10000000000<br />

2048, 100000000000<br />

128, 10000000<br />

64, 1000000<br />

bzw. vollständig ausgeschrieben (<strong>mit</strong> führenden Nullen):<br />

512 0000 0000 0000 0000 0000 0010 0000 0000<br />

1024 0000 0000 0000 0000 0000 0100 0000 0000<br />

2048 0000 0000 0000 0000 0000 1000 0000 0000<br />

128 0000 0000 0000 0000 0000 0000 1000 0000<br />

64 0000 0000 0000 0000 0000 0000 0100 0000<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–65


<strong>Java</strong>-Schulung<br />

ergibt bei dem Aufruf<br />

java Shft01 -1<br />

als Ausgabe am Bildschirm:<br />

-1, 11111111111111111111111111111111<br />

-2, 11111111111111111111111111111110<br />

-4, 11111111111111111111111111111100<br />

-1, 11111111111111111111111111111111<br />

536870911, 11111111111111111111111111111<br />

bzw. vollstständig ausgeschrieben (<strong>mit</strong> führenden Nullen):<br />

-1 1111 1111 1111 1111 1111 1111 1111 1111<br />

-2 1111 1111 1111 1111 1111 1111 1111 1110<br />

-4 1111 1111 1111 1111 1111 1111 1111 1100<br />

-1 1111 1111 1111 1111 1111 1111 1111 1111<br />

536870911 0001 1111 1111 1111 1111 1111 1111 1111<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–66


<strong>Java</strong>-Schulung<br />

4.4.2.2 Der Negationsoperator<br />

Operator<br />

˜<br />

Bedeutung<br />

Bitweises Komplement<br />

• Der unäre Negationsoperator ˜ invertiert jedes Bit seines Operanden.<br />

Beispiel:<br />

1 public class Komp01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i=512,x;<br />

6<br />

7 x = ~i;<br />

8<br />

9 System.out.println(i + ", " + Integer.toBinaryString(i));<br />

10 System.out.println(x + ", " + Integer.toBinaryString(x));<br />

11 System.exit(0);<br />

12 }<br />

13 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–67


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

512, 1000000000<br />

-513, 11111111111111111111110111111111<br />

bzw. vollständig ausgeschrieben (<strong>mit</strong> führenden Nullen):<br />

512 0000 0000 0000 0000 0000 0010 0000 0000<br />

-513 1111 1111 1111 1111 1111 1101 1111 1111<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–68


<strong>Java</strong>-Schulung<br />

4.4.2.3 Die binären Operatoren<br />

Operator Bedeutung<br />

&<br />

Bitweises Und<br />

| Bitweises Oder<br />

ˆ<br />

Bitweises Exklusiv-Oder<br />

• Ersetzt man in den Wahrheitstabellen wahr (true) durch 1 und falsch (false) durch<br />

0 erhält man die Verknüpfungsregeln für die binären Operatoren.<br />

• Die binären Operatoren & und | bilden das logische Produkt bzw. die logische Summe<br />

ihrer Operanden.<br />

• Der binäre Operator ˆ realisiert bitweise das Exklusiv-Oder.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–69


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Biop01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i=1111, j=-2222, x;<br />

6<br />

7 x = i & j;<br />

8<br />

9 System.out.println(i + ", " + Integer.toBinaryString(i));<br />

10 System.out.println(j + ", " + Integer.toBinaryString(j));<br />

11 System.out.println(x + ", " + Integer.toBinaryString(x));<br />

12<br />

13 System.exit(0);<br />

14 }<br />

15 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–70


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

1111, 10001010111<br />

-2222, 11111111111111111111011101010010<br />

1106, 10001010010<br />

bzw. vollständig ausgeschrieben (<strong>mit</strong> führenden Nullen)<br />

1111 0000 0000 0000 0000 0000 0100 0101 0111<br />

-2222 1111 1111 1111 1111 1111 0111 0101 0010<br />

-----------------------------------------------------<br />

& 1106 0000 0000 0000 0000 0000 0100 0101 0010<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–71


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Biop02<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i=1111, j=-2222, x;<br />

6<br />

7 x = i | j;<br />

8<br />

9 System.out.println(i + ", " + Integer.toBinaryString(i));<br />

10 System.out.println(j + ", " + Integer.toBinaryString(j));<br />

11 System.out.println(x + ", " + Integer.toBinaryString(x));<br />

12<br />

13 System.exit(0);<br />

14 }<br />

15 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–72


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

1111, 10001010111<br />

-2222, 11111111111111111111011101010010<br />

-2217, 11111111111111111111011101010111<br />

bzw. vollständig ausgeschrieben (<strong>mit</strong> führenden Nullen)<br />

1111 0000 0000 0000 0000 0000 0100 0101 0111<br />

-2222 1111 1111 1111 1111 1111 0111 0101 0010<br />

-----------------------------------------------------<br />

| -2217 1111 1111 1111 1111 1111 0111 0101 0111<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–73


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Biop03<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i=1111, j=-2222, x;<br />

6<br />

7 x = i ^ j;<br />

8<br />

9 System.out.println(i + ", " + Integer.toBinaryString(i));<br />

10 System.out.println(j + ", " + Integer.toBinaryString(j));<br />

11 System.out.println(x + ", " + Integer.toBinaryString(x));<br />

12<br />

13 System.exit(0);<br />

14 }<br />

15 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–74


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

1111, 10001010111<br />

-2222, 11111111111111111111011101010010<br />

-3323, 11111111111111111111001100000101<br />

bzw. vollständig ausgeschrieben (<strong>mit</strong> führenden Nullen)<br />

1111 0000 0000 0000 0000 0000 0100 0101 0111<br />

-2222 1111 1111 1111 1111 1111 0111 0101 0010<br />

-----------------------------------------------------<br />

^ -3323 1111 1111 1111 1111 1111 0011 0000 0101<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–75


<strong>Java</strong>-Schulung<br />

4.4.3 Verkürzte logische Operatoren<br />

<strong>Java</strong> unterstützt ebenfalls die Kurzschreibweise logischer Ausdrücke. Da relativ oft die Form<br />

operand 1 = operand 1 operator operand 2<br />

auftritt, wird vorzugsweise die verkürzte Schreibweise<br />

operand 1 operator = operand 2<br />

eingesetzt.<br />

Angewendet wird diese Schreibweise bei folgenden Operatoren:<br />

Symbol Operation Kurzform Langform<br />

= 10 n = n >> 10<br />

>>> Verschiebung nach rechts n >>>= 10 n = n >>> 10<br />

<strong>mit</strong> Füllnullen<br />

& Bitweises Und n &= 10 n = n & 10<br />

| Bitweises Oder n |= 10 n = n | 10<br />

ˆ Bitweises Exclusiv-Oder n ^= 10 n = n ^ 10<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000150.tex) P–76


<strong>Java</strong>-Schulung<br />

Kapitel 5<br />

Verzweigungen<br />

5.1 Entscheidungen<br />

Entscheidungen treffen heisst eine Bedingung zu prüfen, um dann, abhängig vom Ergebnis<br />

der Überprüfung, <strong>mit</strong> dem einen oder anderen Programmteil fortzufahren.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–77


<strong>Java</strong>-Schulung<br />

5.1.1 if-Anweisung<br />

Bei diesem Befehl werden eine oder mehrere Anweisungen ausgeführt, wenn die Bedingung<br />

war ist.<br />

Syntax:<br />

oder<br />

if (bedingung)<br />

anweisung;<br />

if (bedingung)<br />

{<br />

anweisung_1;<br />

anweisung_2;<br />

...<br />

anweisung_n;<br />

}<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–78


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Verif01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int v1,v2;<br />

6<br />

7 v1 = Integer.valueOf(args[0]).intValue();<br />

8 v2 = Integer.valueOf(args[1]).intValue();<br />

9<br />

10 if(v1==v2)<br />

11 System.out.println("Die Zahlen sind gleich.");<br />

12 System.exit(0);<br />

13 }<br />

14 }<br />

ergibt bei dem Aufruf<br />

java Verif01 10 10<br />

als Ausgabe am Bildschirm:<br />

Die Zahlen sind gleich.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–79


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Verel11<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int v1;<br />

6<br />

7 v1 = Integer.valueOf(args[0]).intValue();<br />

8<br />

9 if(v1


<strong>Java</strong>-Schulung<br />

5.1.2 if...else-Anweisung<br />

Mit diesem Befehl wird in Abhängigkeit von einer Bedingung entweder die eine oder die<br />

andere Anweisung bzw. die einen oder die anderen Anweisungen ausgeführt.<br />

Syntax:<br />

oder<br />

if (bedingung)<br />

anweisung_1;<br />

else<br />

anweisung_2;<br />

if (bedingung)<br />

{<br />

anweisung_a_1;<br />

anweisung_a_n;<br />

}<br />

else<br />

{<br />

anweisung_b_1;<br />

anweisung_b_n;<br />

}<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–81


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Verif02<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int v1,v2;<br />

6<br />

7 v1 = Integer.valueOf(args[0]).intValue();<br />

8 v2 = Integer.valueOf(args[1]).intValue();<br />

9<br />

10 if(v1==v2)<br />

11 System.out.println("Die Zahlen sind gleich.");<br />

12 else<br />

13 System.out.println("Die Zahlen sind nicht gleich.");<br />

14<br />

15 System.exit(0);<br />

16 }<br />

17 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–82


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Verel01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int v1;<br />

6<br />

7 v1 = Integer.valueOf(args[0]).intValue();<br />

8<br />

9 if(v1


<strong>Java</strong>-Schulung<br />

Außerdem kann auch eine ganze Serie von Bedingungen geprüft werden.<br />

if (bedingung_1)<br />

anweisung_1;<br />

else if (bedingung_2)<br />

anweisung_2;<br />

else if (bedingung_3)<br />

anweisung_3;<br />

else if (bedingung_4)<br />

anweisung_4;<br />

...<br />

...<br />

else if (bedingung_n)<br />

anweisung_n;<br />

else<br />

standard_anweisung;<br />

• Ist bedingung_1 wahr, wird anweisung_1 ausgeführt, ist bedingung_2 wahr,<br />

wird anweisung_2 ausgeführt, u. s. w.<br />

• Trifft keine der Bedingungen zu, wird standard_anweisung ausgeführt.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–84


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Verel02<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int v1;<br />

6<br />

7 v1 = Integer.valueOf(args[0]).intValue();<br />

8<br />

9 if(v10)<br />

12 System.out.println("Die Zahl ist positiv.");<br />

13 else<br />

14 System.out.println("Die Zahl ist Null.");<br />

15<br />

16 System.exit(0);<br />

17 }<br />

18 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–85


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Verel03<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int v1;<br />

6<br />

7 v1 = Integer.valueOf(args[0]).intValue();<br />

8<br />

9 if(v1==1)<br />

10 System.out.println("Die Zahl ist Eins.");<br />

11 else if(v1==2)<br />

12 System.out.println("Die Zahl ist Zwei.");<br />

13 else if(v1==3)<br />

14 System.out.println("Die Zahl ist Drei.");<br />

15 else<br />

16 System.out.println("Die Zahl ist ungleich 1, 2, 3.");<br />

17<br />

18 System.exit(0);<br />

19 }<br />

20 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–86


<strong>Java</strong>-Schulung<br />

Es ergibt sich beispielsweise folgender Dialog bei der Ausführung:<br />

x92@pc:/j000160 > java Verel03 1<br />

Die Zahl ist Eins.<br />

x92@pc:/j000160 > java Verel03 2<br />

Die Zahl ist Zwei.<br />

x92@pc:/j000160 > java Verel03 3<br />

Die Zahl ist Drei.<br />

x92@pc:/j000160 > java Verel03 4<br />

Die Zahl ist ungleich 1, 2, 3.<br />

x92@pc:/j000160 > java Verel03 5<br />

Die Zahl ist ungleich 1, 2, 3.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–87


<strong>Java</strong>-Schulung<br />

5.1.3 Bedingte Ausdrücke<br />

if-Ausdrücke der Form<br />

if (bedingung)<br />

x=ausdruck_1;<br />

else<br />

x=ausdruck_2;<br />

sind durchaus nicht selten. Bei ihnen liegt es nahe, die Variable x und den Zuweisungsoperator<br />

= „auszuklammern“, wodurch folgender Ausdruck entsteht:<br />

Syntax:<br />

bedingung ausdruck_1 : ausdruck_2<br />

Der Wert des gesamten Befehls ist der Wert von ausdruck_1 bzw. ausdruck_2, je nachdem<br />

ob die Aussage von bedingung wahr oder falsch ist.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–88


<strong>Java</strong>-Schulung<br />

Ein Programm der folgenden Form<br />

Beispiel:<br />

1 public class Verel04<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int v1,v2,max;<br />

6<br />

7 v1 = Integer.valueOf(args[0]).intValue();<br />

8 v2 = Integer.valueOf(args[1]).intValue();<br />

9<br />

10 if(v1


<strong>Java</strong>-Schulung<br />

kann nun wie folgt formuliert werden<br />

Beispiel:<br />

1 public class Verel05<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int v1,v2,max;<br />

6<br />

7 v1 = Integer.valueOf(args[0]).intValue();<br />

8 v2 = Integer.valueOf(args[1]).intValue();<br />

9<br />

10 max = (v1


<strong>Java</strong>-Schulung<br />

5.1.4 Geschachtelte if- oder if...else-Anweisungen<br />

<strong>Java</strong> kennt bei der Schachtelung von Anweisungen keine grundsätzlichen Einschränkungen.<br />

So dürfen bei den if-Anweisungen die Anweisungen beliebig sein – insbesondere selbst<br />

wieder if-Anweisungen.<br />

Syntax:<br />

if(bedingung_1)<br />

{<br />

if(bedingung_1a)<br />

...<br />

else<br />

...<br />

}<br />

else<br />

{<br />

if(bedingung_1b)<br />

...<br />

else<br />

...<br />

}<br />

Die geschweiften Klammern dienen hier nur der Übersichtlichkeit, sie sind nicht erforderlich.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–91


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

Zu einem Koodinatenpaar (x,y) soll er<strong>mit</strong>telt werden, in welchem Quadranten es liegt:<br />

1 public class Verel06<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int quadrant, x, y;<br />

6 x = Integer.valueOf(args[0]).intValue();<br />

7 y = Integer.valueOf(args[1]).intValue();<br />

8<br />

9 if (x>=0)<br />

10 if (y>=0)<br />

11 quadrant=1;<br />

12 else<br />

13 quadrant=4;<br />

14 else<br />

15 if (y>=0)<br />

16 quadrant=2;<br />

17 else<br />

18 quadrant=3;<br />

19<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–92


<strong>Java</strong>-Schulung<br />

20 System.out.println("Punkt liegt im " + quadrant +<br />

21 ". Quadranten");<br />

22 System.exit(0);<br />

23 }<br />

24 }<br />

oder unter Verwendung bedingter Ausdrücke:<br />

1 public class Verel06a<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int quadrant, x, y;<br />

6 x = Integer.valueOf(args[0]).intValue();<br />

7 y = Integer.valueOf(args[1]).intValue();<br />

8<br />

10<br />

9 quadrant = x>=0 y>=0 1 : 4 : y>=0 2 : 3;<br />

11 System.out.println("Punkt liegt im " + quadrant +<br />

12 ". Quadranten");<br />

13 System.exit(0);<br />

14 }<br />

15 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000160.tex) P–93


<strong>Java</strong>-Schulung<br />

5.1.5 switch-Anweisung<br />

Mit geschachtelten if-Anweisungen lassen sich grundsätzlich alle Entscheidungsfolgen realisieren:<br />

1 public class Swch01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int zahl;<br />

6 zahl=Integer.valueOf(args[0]).intValue();<br />

7<br />

8 if(zahl==1)<br />

9 System.out.println("Die Zahl ist Eins.");<br />

10 else<br />

11 if(zahl==2)<br />

12 System.out.println("Die Zahl ist Zwei.");<br />

13 else<br />

14 if(zahl==3)<br />

15 System.out.println("Die Zahl ist Drei.");<br />

16 else<br />

17 if(zahl==4 || zahl==5)<br />

18 System.out.println(<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–94


<strong>Java</strong>-Schulung<br />

19 "Die Zahl ist Vier oder Fünf.");<br />

20 else<br />

21 System.out.println(<br />

22 "Die Zahl ist weder Eins noch ... Fünf.");<br />

23 System.exit(0);<br />

24 }<br />

25 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–95


<strong>Java</strong>-Schulung<br />

Da Entscheidungsfolgen dieser Art keineswegs selten vorkommen, kennt <strong>Java</strong> <strong>mit</strong> der Anweisung<br />

switch eine Realisierung:<br />

Syntax:<br />

switch (ausdruck)<br />

{<br />

case konstanter ausdruck_1:<br />

anweisung_1;<br />

case konstanter ausdruck_2:<br />

anweisung_2;<br />

case konstanter ausdruck_3:<br />

anweisung_3;<br />

...<br />

...<br />

case konstanter ausdruck_n:<br />

anweisung_n;<br />

default:<br />

anweisungen<br />

}<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–96


<strong>Java</strong>-Schulung<br />

• Der Ausdruck ausdruck wird vollständig ausgewertet.<br />

• Wir eine Übereinstimmung <strong>mit</strong> case konstanter ausdruck_i: (1 ≤ i ≤ n)<br />

gefunden, dann wird bei dieser Anweisung die Abarbeitung fortgesetzt.<br />

• Wird keine Übereinstimmung gefunden, wird bei default: fortgefahren.<br />

• Gibt es kein default: wird der Anweisungsteil der switch-Anweisung ignoriert.<br />

• Sowohl der Ausdruck ausdruck als auch die konstanten Ausdrücke müssen ganzzahlig<br />

(byte, char, short oder int) sein.<br />

• Die Reihenfolge der case- oder default-Anweisung ist beliebig.<br />

• Durch den Befehl break wird die switch-Anweisung sofort verlassen.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–97


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Swch02<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int zahl;<br />

6 zahl=Integer.valueOf(args[0]).intValue();<br />

7<br />

8 switch(zahl)<br />

9 {<br />

10 case 1:<br />

11 System.out.println("Die Zahl ist Eins."); break;<br />

12 case 2:<br />

13 System.out.println("Die Zahl ist Zwei."); break;<br />

14 case 3:<br />

15 System.out.println("Die Zahl ist Drei."); break;<br />

16 case 4:<br />

17 case 5:<br />

18 System.out.println("Die Zahl ist Vier " +<br />

19 "oder Fünf."); break;<br />

20 default:<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–98


<strong>Java</strong>-Schulung<br />

21 System.out.println(<br />

22 "Die Zahl ist weder Eins noch ... Fünf.");<br />

23 }<br />

24 System.exit(0);<br />

25 }<br />

26 }<br />

ergibt bei dem Aufruf<br />

java Swch02 4<br />

als Ausgabe am Bildschirm:<br />

Die Zahl ist Vier oder Fünf.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–99


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Swch03<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int zahl;<br />

6 zahl=Integer.valueOf(args[0]).intValue();<br />

7<br />

8 switch(zahl)<br />

9 {<br />

10 case 1:<br />

11 System.out.println("Montag"); break;<br />

12 case 2:<br />

13 System.out.println("Dienstag"); break;<br />

14 case 3:<br />

15 System.out.println("Mittwoch"); break;<br />

16 case 4:<br />

17 System.out.println("Donnerstag"); break;<br />

18 case 5:<br />

19 System.out.println("Freitag"); break;<br />

20 case 6:<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–100


<strong>Java</strong>-Schulung<br />

21 System.out.println("Samstag"); break;<br />

22 case 7:<br />

23 System.out.println("Sonntag"); break;<br />

24 default:<br />

25 System.out.println("Eingabe ist falsch.");<br />

26 }<br />

27<br />

28 System.exit(0);<br />

29 }<br />

30 }<br />

• Es sind nur Vergleiche <strong>mit</strong> pri<strong>mit</strong>iven Datentypen möglich.<br />

• Es können keine grösseren pri<strong>mit</strong>iven Typen (long, float, double) oder Objekte verwendet<br />

werden.<br />

• Es kann abgesehen von Gleichheit keine Beziehung geprüft werden. Verschachtelte if-<br />

Anweisungen sind dagegen auf jede Art der Prüfung und auf jeden Datentyp anwendbar.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–101


<strong>Java</strong>-Schulung<br />

Beispiel Datum von Ostern:<br />

1 public class Osterdatum<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int jahr, monat, tag, m=0, n=0, a,b,c,d,e,f,g;<br />

6 jahr = Integer.valueOf(args[0]).intValue();<br />

7<br />

8 switch(jahr/100)<br />

9 {<br />

10 case 15:<br />

11 case 16: m=22; n=2; break;<br />

12 case 17: m=23; n=3; break;<br />

13 case 18: m=23; n=4; break;<br />

14 case 19:<br />

15 case 20: m=24; n=5; break;<br />

16 case 21: m=24; n=6;<br />

17 }<br />

18 a=jahr%19;<br />

19 b=jahr%4;<br />

20 c=jahr%7;<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–102


<strong>Java</strong>-Schulung<br />

21 d=(19*a+m)%30;<br />

22 e=(2*b+4*c+6*d+n)%7;<br />

23 f=22+d+e;<br />

24 g=d+e-9;<br />

25<br />

26 if(f10) g=18;<br />

35 monat=4;<br />

36 tag=g;<br />

37 }<br />

38 System.out.println("Ostersonntag ist/war am " + tag +<br />

39 "." + monat + "." + jahr);<br />

40 System.exit(0);<br />

41 }<br />

42 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–103


<strong>Java</strong>-Schulung<br />

ergibt bei dem Aufruf<br />

java Osterdatum 2002<br />

als Ausgabe am Bildschirm:<br />

Ostersonntag ist/war am 31.3.2002<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000162.tex) P–104


<strong>Java</strong>-Schulung<br />

5.2 Wiederholungen (Schleifen)<br />

Wiederholung bedeutet, dass ein Programmteil mehrfach nacheinander ausgeführt wird. <strong>Java</strong><br />

stellt hierzu folgende Befehle zur Verfügung:<br />

• while<br />

• do...while<br />

• for<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000170.tex) P–105


<strong>Java</strong>-Schulung<br />

5.2.1 while-Schleife<br />

Bei diesem Befehl werden eine oder mehrere Anweisungen immer wieder ausgeführt, wenn<br />

die Bedingung wahr ist.<br />

Syntax:<br />

oder<br />

while (bedingung)<br />

anweisung;<br />

while (bedingung)<br />

{<br />

anweisung_1;<br />

anweisung_2;<br />

...<br />

}<br />

• Zunächst wird der Ausdruck bedingung ausgewertet.<br />

• Ist sein logischer Wert wahr wird/werden die Anweisung/en ausgeführt.<br />

• Danach wird wiederum der Ausdruck bedingung ausgewertet.<br />

• usw.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000170.tex) P–106


<strong>Java</strong>-Schulung<br />

Beispiel 1:<br />

Ausgabe der Zahlen von 1 bis 10 am Bildschirm<br />

1 public class Wwhl01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i;<br />

6 i=0;<br />

7<br />

8 while (i


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

Die Zahl ist: 1<br />

Die Zahl ist: 2<br />

Die Zahl ist: 3<br />

Die Zahl ist: 4<br />

Die Zahl ist: 5<br />

Die Zahl ist: 6<br />

Die Zahl ist: 7<br />

Die Zahl ist: 8<br />

Die Zahl ist: 9<br />

Die Zahl ist: 10<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000170.tex) P–108


<strong>Java</strong>-Schulung<br />

Beispiel 2:<br />

Berechnung der Summe der Zahlen von 1 bis 10 und Ausgabe der Summe am Bildschirm<br />

1 public class Wwhl02<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i=0, summe=0;<br />

6<br />

7 while (i


<strong>Java</strong>-Schulung<br />

Beispiel 3:<br />

Eine Endlosschleife . . .<br />

1 public class Wwhl03<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 boolean ok=true;<br />

6<br />

7 while (ok)<br />

8 {<br />

9 System.out.print("X");<br />

10 }<br />

11<br />

12 System.exit(0);<br />

13 }<br />

14 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000170.tex) P–110


<strong>Java</strong>-Schulung<br />

5.2.2 Geschachtelte while-Schleifen<br />

Innerhalb einer while-Schleife sind weitere Schleifen erlaubt.<br />

Syntax:<br />

while (bedingung_1)<br />

{<br />

...<br />

...<br />

while (bedingung_2)<br />

{<br />

...<br />

...<br />

...<br />

...<br />

}<br />

...<br />

...<br />

}<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000170.tex) P–111


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Wwhl04<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i=0, j;<br />

6 while (i++


<strong>Java</strong>-Schulung<br />

5.2.3 do...while-Schleife<br />

Bei diesem Befehl werden eine oder mehrere Anweisungen immer wieder ausgeführt, wenn<br />

die Bedingung wahr ist.<br />

Syntax:<br />

oder<br />

do<br />

anweisung;<br />

while (bedingung);<br />

do<br />

{<br />

anweisung_1;<br />

anweisung_2;<br />

...<br />

anweisung_n;<br />

}<br />

while (bedingung);<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000172.tex) P–113


<strong>Java</strong>-Schulung<br />

• Zunächst wird die Anweisung bzw. werden die Anweisungen ausgeführt.<br />

• Danach wird der Ausdruck bedingung ausgewertet.<br />

• Ist das Ergebnis wahr wird wiederum die Anweisung bzw. werden wiederum die Anweisungen<br />

ausgeführt.<br />

• usw.<br />

5.2.3.1 Unterschied zwischen den Befehlen while und do...while<br />

• Bei einer while-Schleife wird der Ausdruck zum erstem Mal ausgewertet, bevor die<br />

Anweisung der Schleife zum ersten Mal ausgeführt wird.<br />

• Daher wird die Anweisung niemals ausgeführt, wenn der Ausdruck von vornherein<br />

falsch ist.<br />

• Bei einer do...while-Schleife wird der Ausdruck zum erstem Mal ausgewertet, nachdem<br />

die Anweisung der Schleife zum ersten Mal ausgeführt wurde.<br />

• Daher wird die Anweisung mindestens einmal ausgeführt, selbst wenn der Ausdruck von<br />

vornherein falsch war.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000172.tex) P–114


<strong>Java</strong>-Schulung<br />

Beispiel 1:<br />

Ausgabe der Zahlen von 1 bis 10 am Bildschirm<br />

1 public class Wdwh01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i;<br />

6 i=0;<br />

7<br />

8 do<br />

9 {<br />

10 i=i+1;<br />

11 System.out.println("Die Zahl ist: " + i);<br />

12 }<br />

13 while (i


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

Die Zahl ist: 1<br />

Die Zahl ist: 2<br />

Die Zahl ist: 3<br />

Die Zahl ist: 4<br />

Die Zahl ist: 5<br />

Die Zahl ist: 6<br />

Die Zahl ist: 7<br />

Die Zahl ist: 8<br />

Die Zahl ist: 9<br />

Die Zahl ist: 10<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000172.tex) P–116


<strong>Java</strong>-Schulung<br />

Beispiel 2:<br />

Berechnung der Summe der Zahlen von 1 bis 10 und Ausgabe der Summe am Bildschirm<br />

1 public class Wdwh02<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i=0, summe=0;<br />

6 do<br />

7 {<br />

8 i=i+1;<br />

9 summe=summe+i;<br />

10 }<br />

11 while (i


<strong>Java</strong>-Schulung<br />

Beispiel 3:<br />

Eine Endlosschleife . . .<br />

1 public class Wwhl03<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 boolean ok=true;<br />

6<br />

7 do<br />

8 {<br />

9 System.out.print("X");<br />

10 }<br />

11 while (ok);<br />

12<br />

13 System.exit(0);<br />

14 }<br />

15 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000172.tex) P–118


<strong>Java</strong>-Schulung<br />

5.2.4 Geschachtelte do...while-Schleifen<br />

Innerhalb einer do...while-Schleife sind weitere Schleifen erlaubt.<br />

Syntax:<br />

do<br />

{<br />

...<br />

...<br />

do<br />

{<br />

...<br />

...<br />

...<br />

...<br />

}<br />

while (bedingung_2);<br />

...<br />

...<br />

}<br />

while (bedingung_1);<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000173.tex) P–119


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Wdwh04<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i=1, j;<br />

6 do<br />

7 {<br />

8 j=1;<br />

9 do<br />

10 System.out.print(i+ " * " +j+ " = " +i*j+ " ");<br />

11 while (j++


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

1 * 1 = 1 1 * 2 = 2 1 * 3 = 3<br />

2 * 1 = 2 2 * 2 = 4 2 * 3 = 6<br />

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000173.tex) P–121


<strong>Java</strong>-Schulung<br />

5.2.5 for-Schleife<br />

Bei diesem Befehl werden eine oder mehrere Anweisungen immer wieder ausgeführt, wenn<br />

die Bedingung wahr ist.<br />

Syntax:<br />

oder<br />

for (ausdruck_1; bedingung; ausdruck_2)<br />

anweisung;<br />

for (ausdruck_1; bedingung; ausdruck_2)<br />

{<br />

anweisung_1;<br />

anweisung_2;<br />

...<br />

anweisung_n;<br />

}<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000180.tex) P–122


<strong>Java</strong>-Schulung<br />

• anweisung_1 ist die Initialisierung, die den Beginn der Schleife einleitet.<br />

• bedingung ist der Test, der nach jeder Iteration der Schleife ausgeführt wird. Der Test<br />

muss ein boolscher Ausdruck sein. Ergibt der Test wahr, wird die Schleife ausgeführt.<br />

• anweisung_2 ist ein beliebiger Ausdrucks- oder Funktionsaufruf. Üblicherweise wird<br />

anweisung_2 verwendet, um den Wert des Schleifenindexes zu ändern.<br />

• Die drei Komponenten der for-Anweisung können einzeln oder auch zusammen fehlen,<br />

jedoch müssen die Semikolon in der Klammer an der richtigen Stelle stehen.<br />

• for ( i=5 ; i


<strong>Java</strong>-Schulung<br />

Beispiel 1:<br />

Ausgabe der Zahlen von 1 bis 10 am Bildschirm<br />

1 public class Wfor01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i;<br />

6<br />

7 for (i=1; i


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

Die Zahl ist: 1<br />

Die Zahl ist: 2<br />

Die Zahl ist: 3<br />

Die Zahl ist: 4<br />

Die Zahl ist: 5<br />

Die Zahl ist: 6<br />

Die Zahl ist: 7<br />

Die Zahl ist: 8<br />

Die Zahl ist: 9<br />

Die Zahl ist: 10<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000180.tex) P–125


<strong>Java</strong>-Schulung<br />

Beispiel 2:<br />

Berechnung der Summe der Zahlen von 1 bis 10 und Ausgabe der Summe am Bildschirm<br />

1 public class Wfor02<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, summe=0;<br />

6<br />

7 for (i=1; i


<strong>Java</strong>-Schulung<br />

Beispiel 3:<br />

Berechnung der Summe der Zahlen von 1 bis 10 und Ausgabe der Summe sowie der Zwischenergebnisse<br />

am Bildschirm<br />

1 public class Wfor03<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, summe=0;<br />

6<br />

7 for (i=1; i


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

i: 1 --- summe: 1<br />

i: 2 --- summe: 3<br />

i: 3 --- summe: 6<br />

i: 4 --- summe: 10<br />

i: 5 --- summe: 15<br />

i: 6 --- summe: 21<br />

i: 7 --- summe: 28<br />

i: 8 --- summe: 36<br />

i: 9 --- summe: 45<br />

i: 10 --- summe: 55<br />

Die Gesamtsumme ist: 55<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000180.tex) P–128


<strong>Java</strong>-Schulung<br />

Beispiel 4:<br />

Berechnung des Sinus von 0 bis 90 Grad.<br />

1 public class Sico01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int w;<br />

6 double b, ss;<br />

7<br />

8 for (w=0; w


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

w= 0 b= 0.0 sin= 0.0<br />

w= 1 b= 0.017453292519943295 sin= 0.01745240643728351<br />

w= 2 b= 0.03490658503988659 sin= 0.03489949670250097<br />

w= 3 b= 0.05235987755982988 sin= 0.05233595624294383<br />

w= 4 b= 0.06981317007977318 sin= 0.0697564737441253<br />

w= 5 b= 0.08726646259971647 sin= 0.08715574274765817<br />

w= 6 b= 0.10471975511965977 sin= 0.10452846326765346<br />

w= 7 b= 0.12217304763960307 sin= 0.12186934340514748<br />

w= 8 b= 0.13962634015954636 sin= 0.13917310096006544<br />

...<br />

...<br />

...<br />

w= 82 b= 1.43116998663535 sin= 0.9902680687415703<br />

w= 83 b= 1.4486232791552935 sin= 0.992546151641322<br />

w= 84 b= 1.4660765716752369 sin= 0.9945218953682733<br />

w= 85 b= 1.4835298641951802 sin= 0.9961946980917455<br />

w= 86 b= 1.5009831567151233 sin= 0.9975640502598242<br />

w= 87 b= 1.5184364492350666 sin= 0.9986295347545738<br />

w= 88 b= 1.53588974175501 sin= 0.9993908270190958<br />

w= 89 b= 1.5533430342749535 sin= 0.9998476951563913<br />

w= 90 b= 1.5707963267948966 sin= 1.0<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000180.tex) P–130


<strong>Java</strong>-Schulung<br />

5.2.6 Geschachtelte for-Schleifen<br />

Innerhalb einer for-Schleife ist eine weitere Schleife erlaubt.<br />

Syntax:<br />

for (ausdruck_1; bedingung; ausdruck_2)<br />

{<br />

...<br />

...<br />

for (ausdruck_1; bedingung; ausdruck_2)<br />

{<br />

...<br />

...<br />

...<br />

...<br />

}<br />

...<br />

...<br />

}<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000180.tex) P–131


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Wfor04<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, j;<br />

6<br />

7 for (i=1; i


<strong>Java</strong>-Schulung<br />

Beispiel 2:<br />

Berechnung der Hypothenuse rechtwinkliger Dreiecke.<br />

1 public class Hypo01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int a, b;<br />

6 double c;<br />

7<br />

8 for (a=1; a


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

a= 1 b= 1 c= 1.4142135623730951<br />

a= 1 b= 2 c= 2.23606797749979<br />

a= 1 b= 3 c= 3.1622776601683795<br />

a= 1 b= 4 c= 4.123105625617661<br />

a= 1 b= 5 c= 5.0990195135927845<br />

a= 1 b= 6 c= 6.082762530298219<br />

a= 1 b= 7 c= 7.0710678118654755<br />

a= 1 b= 8 c= 8.06225774829855<br />

a= 1 b= 9 c= 9.055385138137417<br />

...<br />

...<br />

...<br />

a= 9 b= 1 c= 9.055385138137417<br />

a= 9 b= 2 c= 9.219544457292887<br />

a= 9 b= 3 c= 9.486832980505138<br />

a= 9 b= 4 c= 9.848857801796104<br />

a= 9 b= 5 c= 10.295630140987<br />

a= 9 b= 6 c= 10.816653826391969<br />

a= 9 b= 7 c= 11.40175425099138<br />

a= 9 b= 8 c= 12.041594578792296<br />

a= 9 b= 9 c= 12.727922061357855<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000180.tex) P–134


<strong>Java</strong>-Schulung<br />

5.2.7 Weitere Anwendungen für Schleifen<br />

Beispiel 1:<br />

Es soll die Reihe<br />

berechnet werden.<br />

1 + 1 2 + 1 4 + 1 8 + · · · + 1 2 n<br />

1 public class Wfor11<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, n;<br />

6 double summand=1., summe=1.;<br />

7<br />

8 n=Integer.valueOf(args[0]).intValue();<br />

9<br />

10 for (i=1; i


<strong>Java</strong>-Schulung<br />

16<br />

17 System.exit(0);<br />

18 }<br />

19 }<br />

ergibt bei dem Aufruf<br />

java Wfor11 11<br />

als Ausgabe am Bildschirm:<br />

Die Summe ist: 1.99951171875<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000185.tex) P–136


<strong>Java</strong>-Schulung<br />

Beispiel 2:<br />

Es soll die Fakultät einer Zahl berechnet werden.<br />

1 public class Wfor10<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 long i, n, fakultaet;<br />

6 n=Integer.valueOf(args[0]).intValue();<br />

7<br />

8 for (i=fakultaet=1; i


<strong>Java</strong>-Schulung<br />

Beispiel fehlerhafte Schleife (1):<br />

1 public class Wfor12<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, summe=0;<br />

6<br />

7 for (i=1; i>10; i++)<br />

8 {<br />

9 summe+=i;<br />

10 }<br />

11 System.out.println("Die Summe ist: " + summe);<br />

12<br />

13 System.exit(0);<br />

14 }<br />

15 }<br />

Als Ausgabe erhält man:<br />

Die Summe ist: 0<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000185.tex) P–138


<strong>Java</strong>-Schulung<br />

Richtig ist:<br />

1 public class Wfor12a<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, summe=0;<br />

6<br />

7 for (i=1; i


<strong>Java</strong>-Schulung<br />

Beispiel fehlerhafte Schleife (2):<br />

1 public class Wfor13<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, summe=0;<br />

6<br />

7 for (i=1; i


<strong>Java</strong>-Schulung<br />

Richtig ist:<br />

1 public class Wfor13a<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, summe=0;<br />

6<br />

7 for (i=1; i


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

1 1<br />

2 4<br />

3 9<br />

4 16<br />

5 25<br />

6 36<br />

7 49<br />

8 64<br />

9 81<br />

10 100<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000185.tex) P–142


<strong>Java</strong>-Schulung<br />

5.2.8 Die Anweisung break<br />

Die Anweisung break bewirkt, dass <strong>mit</strong> ihrer Ausführung die Abarbeitung der Schleife<br />

sofort beendet wird. Dies geschieht unabhängig davon, ob das Abbruchkriterium der Schleife<br />

erfüllt ist oder nicht.<br />

Syntax:<br />

break;<br />

Die Anweisung break darf nicht direkt auftreten sondern darf nur bedingt ausgeführt werden.<br />

Daher kann die Anweisung nur in einer if- oder if...else-Anweisung auftreten.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000190.tex) P–143


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Brk001<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int x=1;<br />

6 while(true)<br />

7 {<br />

8 System.out.println("x: " + x);<br />

9 if(x++==3) break;<br />

10 }<br />

11 System.out.println("X: " + x);<br />

12 System.exit(0);<br />

13 }<br />

14 }<br />

Als Ausgabe erhält man:<br />

x: 1<br />

x: 2<br />

x: 3<br />

X: 4<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000190.tex) P–144


<strong>Java</strong>-Schulung<br />

Bei geschachtelten Schleifen bewirkt die Anweisung break, dass <strong>mit</strong> ihrer Ausführung die<br />

Abarbeitung der inneren Schleife sofort beendet wird.<br />

Beispiel:<br />

1 public class Brk002<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int x=0, y=0;<br />

6 for (x=0; x


<strong>Java</strong>-Schulung<br />

18 System.exit(0);<br />

19 }<br />

20 }<br />

Als Ausgabe erhält man:<br />

x: 0<br />

0 1 2 3 4 5<br />

x: 1<br />

0 1 2 3 4 5<br />

x: 2<br />

0 1 2 3 4 5<br />

x: 3<br />

0 1 2 3 4 5<br />

x: 4<br />

0 1 2 3 4 5<br />

X: 5<br />

Y: 5<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000190.tex) P–146


<strong>Java</strong>-Schulung<br />

5.2.9 Die Anweisung continue<br />

Die Anweisung continue bewirkt, dass <strong>mit</strong> ihrer Ausführung die Schleife erneut aufgerufen<br />

wird. Die Schleifenvariable erhält dabei den nächsten Wert.<br />

Syntax:<br />

continue;<br />

Die Anweisung continue darf nicht direkt auftreten sondern darf nur bedingt ausgeführt<br />

werden. Daher kann die Anweisung nur in einer if- oder if...else-Anweisung auftreten.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000195.tex) P–147


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Con001<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 double i;<br />

6<br />

7 for (i=-4.; i


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

Der Kehrwert ist: -0.25<br />

Der Kehrwert ist: -0.3333333333333333<br />

Der Kehrwert ist: -0.5<br />

Der Kehrwert ist: -1.0<br />

Der Kehrwert ist: 1.0<br />

Der Kehrwert ist: 0.5<br />

Der Kehrwert ist: 0.3333333333333333<br />

Der Kehrwert ist: 0.25<br />

Die Anweisung continue sorgt in diesem Fall dafür, dass bei dem Schleifenwert 0 nicht<br />

dividiert wird.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000195.tex) P–149


<strong>Java</strong>-Schulung<br />

5.2.10 Benannte Schleifen<br />

Sowohl break- als auch continue-Konstrukte können <strong>mit</strong> einem optionalen Argument<br />

versehen werden.<br />

Syntax:<br />

break label;<br />

bzw.<br />

continue label;<br />

Während bei der üblichen Verwendung von break als auch continue immer nur die gerade<br />

aktuelle Schleife verlassen bzw. von vorne durchlaufen wird, kann durch die Verwendung<br />

von Marken auch ein Sprung über mehrere Schleifen durchgeführt werden.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000200.tex) P–150


<strong>Java</strong>-Schulung<br />

Beispiel für break:<br />

1 public class Brk004<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i,j;<br />

6<br />

7 sch_1: for (i=1; i


<strong>Java</strong>-Schulung<br />

21 System.exit(0);<br />

22 }<br />

23 }<br />

Als Ausgabe erhält man:<br />

2 3 4 5 6<br />

3 4 5 6 7<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000200.tex) P–152


<strong>Java</strong>-Schulung<br />

Beispiel für continue:<br />

1 public class Con003<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i,j;<br />

6<br />

7 sch_1: for (i=1; i


<strong>Java</strong>-Schulung<br />

21 System.exit(0);<br />

22 }<br />

23 }<br />

Als Ausgabe erhält man:<br />

2 3 4 5 6<br />

3 4 5 6 7<br />

4 5 6 7<br />

5 6 7<br />

6 7<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000200.tex) P–154


<strong>Java</strong>-Schulung<br />

Kapitel 6<br />

Felder (Arrays oder Vektoren)<br />

Felder speichern mehrere Variablen eines Datentyps, beispielsweise fünf Variablen des Datentyps<br />

int unter einem Variablennamen.<br />

• Ein einzelner Platz in einem Feld heißt Element.<br />

• Die Anzahl der Elemente ist gleich der Größe des Feldes.<br />

• Jedes Element bekommt einen Index zugeordnet entsprechend seiner Position im Feld.<br />

• Die Numerierung beginnt stets bei Null.<br />

Felder müssen deklariert, allokiert und initialisiert werden.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000130.tex) P–155


<strong>Java</strong>-Schulung<br />

Felder werden über Referenzen verwaltet. Dies unterliegt folgenden Gesichtspunkten:<br />

• Felder werden über Referenzen manipuliert.<br />

• Felder werden <strong>mit</strong>tels new dynamisch generiert.<br />

• Felder werden vom garbage Collector entsorgt.<br />

In den meisten Fällen kann die Besonderheit von Feldern vernachlässigt werden, sie hat allerdings<br />

folgende Auswirkungen:<br />

• Feld-Variablen sind Referenzen,<br />

• Felder werden zur Laufzeit eingerichtet,<br />

• Felder sind Methoden zugeordnet,<br />

• Felder besitzen Instanzvariablen.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000130.tex) P–156


<strong>Java</strong>-Schulung<br />

In <strong>Java</strong> erfolgt der Zugriff auf die Elemente eines Feldes <strong>mit</strong>tels der Angabe des Index in eckigen<br />

Klammern. Bei mehrdimensionalen Arrays werden mehrere Klammernpaare verwendet:<br />

a[1]<br />

a[1][2]<br />

a[1][2][3]<br />

bzw. in allgemeiner Form<br />

a[i]<br />

a[i][j]<br />

a[i][j][k]<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000130.tex) P–157


<strong>Java</strong>-Schulung<br />

6.1 Anlegen eines Feldes<br />

6.1.1 Deklaration eines Feldes<br />

Felder müssen von einem bestimmten Datentyp sein. Der erste Schritt ist das Anlegen einer<br />

Variablen (Referenz), die das Feld aufnimmt.<br />

Syntax:<br />

datentyp [] variablenname<br />

Beispiel:<br />

int [] Zahl;<br />

double [] Gzahl;<br />

Wichtig ist, daß die Größe des Feldes hier nicht angegeben wird. Die eckigen Klammern<br />

können vor oder hinter dem Bezeichner angeordnet werden. Sie dienen nur der Information,<br />

dass es sich um ein Feld handelt.<br />

Beispiel:<br />

int [] Zahl;<br />

int Zahl [];<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000130.tex) P–158


<strong>Java</strong>-Schulung<br />

6.1.2 Allokierung eines Feldes<br />

Im nächsten Schritt müssen wir Speicherplatz anfordern. Die geschieht <strong>mit</strong>tels des Befehls<br />

new.<br />

Syntax:<br />

variablenname = new datentyp[elementanzahl]<br />

Beispiel:<br />

Zahl = new int [2];<br />

Gzahl = new double [2];<br />

Wenn Felder auf diese Weise angelegt werden, so werden alle Element <strong>mit</strong> Defaultwerten (0)<br />

belegt.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000130.tex) P–159


<strong>Java</strong>-Schulung<br />

6.1.3 Initialisierung eines Feldes<br />

Mittels des Befehls new haben wir ein Feld angelegt und es muß nun <strong>mit</strong> Werten belegt<br />

werden.<br />

Syntax:<br />

variablenname[index] = wert<br />

Beispiel:<br />

Zahl[0] = 24;<br />

Zahl[1] = 12;<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000131.tex) P–160


<strong>Java</strong>-Schulung<br />

6.1.4 Gleichzeitiges Deklarieren, Allokieren und Initialisieren<br />

Es ist ferner möglich Deklaration, Allokierung und Initialisierung in einem Schritt durchzuführen.<br />

Syntax:<br />

datentyp [] variablenname = {wert1, wert2, wert3, ...}<br />

Beispiel:<br />

int [] Zahl = {24, 18, 12, 6};<br />

double [] Gzahl = {1.2345, 2.3456, 3.4567};<br />

Die Werte dürfen auch errechnete Werte sein, wenn sie zur Generierungszeit eindeutig definiert<br />

sind.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000131.tex) P–161


<strong>Java</strong>-Schulung<br />

Beispiel:<br />

1 public class Feld01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int [] Zahl;<br />

6 int [] Zahl2;<br />

7<br />

8 Zahl = new int[2];<br />

9 Zahl2 = new int[2];<br />

10<br />

11 Zahl[0] = 12;<br />

12 Zahl[1] = 24;<br />

13<br />

14 double [] Gzahl = {6.54321, 1.23456, 2.22222};<br />

15<br />

16 System.out.println(Zahl[0]*Zahl[1]);<br />

17 System.out.println(Zahl2[0]+" "+Zahl2[1]);<br />

18 System.out.println(Gzahl[0]+Gzahl[1]+Gzahl[2]);<br />

19 }<br />

20 }<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000131.tex) P–162


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

288<br />

0 0<br />

9.99999<br />

Bei jedem Zugriff auf ein Feldelement wird überprüft, ob das Element innerhalb der Dimensionen<br />

des Feldes liegt.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000131.tex) P–163


<strong>Java</strong>-Schulung<br />

Durch die Instanzvariable length kann man zu jeder Zeit überprüfen, wieviele Elemente in<br />

dem Feld enthalten sind.<br />

Beispiel:<br />

1 public class Feld02<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int [] Zahl = new int[2];<br />

6 System.out.println("Anzahl der Elemente: "<br />

7 + Zahl.length);<br />

8 System.exit(0);<br />

9 }<br />

10 }<br />

Als Ausgabe erhält man:<br />

Anzahl der Elemente: 2<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000131.tex) P–164


<strong>Java</strong>-Schulung<br />

6.2 Schleifen und Felder<br />

Felder können <strong>mit</strong>tels Schleifen bearbeitet werden:<br />

Beispiel:<br />

1 public class Schl01<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5<br />

6 int i,summe=0;<br />

7 int [] feld = new int[11];<br />

8<br />

9 for(i=1;i


<strong>Java</strong>-Schulung<br />

17 summe+=feld[i];<br />

18 System.out.println("Die Summe ist: " + summe);<br />

19<br />

20 System.exit(0);<br />

21 }<br />

22 }<br />

Als Ausgabe erhält man:<br />

2 4 6 8 10 12 14 16 18 20<br />

Die Summe ist: 110<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000240.tex) P–166


<strong>Java</strong>-Schulung<br />

6.2.1 Beispiel: Sieb des Eratosthenes<br />

Durch das Sieb des Eratosthenes kann man schnell Primzahlen errechnen.<br />

Zum Beispiel Berechnung der Primzahlen von 1 bis 100:<br />

1 2 3 4 5 6 7 8 9 10<br />

11 12 13 14 15 16 17 18 19 20<br />

21 22 23 24 25 26 27 28 29 30<br />

31 32 33 34 35 36 37 38 39 40<br />

41 42 43 44 45 46 47 48 49 50<br />

51 52 53 54 55 56 57 58 59 60<br />

61 62 63 64 65 66 67 68 69 70<br />

71 72 73 74 75 76 77 78 79 80<br />

81 82 83 84 85 86 87 88 89 90<br />

91 92 93 94 95 96 97 98 99 100<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000250.tex) P–167


<strong>Java</strong>-Schulung<br />

Schritt 1:<br />

(Löschen der Vielfachen von 2)<br />

-- 2 3 -- 5 -- 7 -- 9 --<br />

11 -- 13 -- 15 -- 17 -- 19 --<br />

21 -- 23 -- 25 -- 27 -- 29 --<br />

31 -- 33 -- 35 -- 37 -- 39 --<br />

41 -- 43 -- 45 -- 47 -- 49 --<br />

51 -- 53 -- 55 -- 57 -- 59 --<br />

61 -- 63 -- 65 -- 67 -- 69 --<br />

71 -- 73 -- 75 -- 77 -- 79 --<br />

81 -- 83 -- 85 -- 87 -- 89 --<br />

91 -- 93 -- 95 -- 97 -- 99 --<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000250.tex) P–168


<strong>Java</strong>-Schulung<br />

Schritt 2:<br />

(Löschen der Vielfachen von 3)<br />

-- 2 3 -- 5 -- 7 -- -- --<br />

11 -- 13 -- -- -- 17 -- 19 --<br />

-- -- 23 -- 25 -- -- -- 29 --<br />

31 -- -- -- 35 -- 37 -- -- --<br />

41 -- 43 -- -- -- 47 -- 49 --<br />

-- -- 53 -- 55 -- -- -- 59 --<br />

61 -- -- -- 65 -- 67 -- -- --<br />

71 -- 73 -- -- -- 77 -- 79 --<br />

-- -- 83 -- 85 -- -- -- 89 --<br />

91 -- -- -- 95 -- 97 -- -- --<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000250.tex) P–169


<strong>Java</strong>-Schulung<br />

Schritt 3:<br />

(Löschen der Vielfachen von 5)<br />

-- 2 3 -- 5 -- 7 -- -- --<br />

11 -- 13 -- -- -- 17 -- 19 --<br />

-- -- 23 -- -- -- -- -- 29 --<br />

31 -- -- -- -- -- 37 -- -- --<br />

41 -- 43 -- -- -- 47 -- 49 --<br />

-- -- 53 -- -- -- -- -- 59 --<br />

61 -- -- -- -- -- 67 -- -- --<br />

71 -- 73 -- -- -- 77 -- 79 --<br />

-- -- 83 -- -- -- -- -- 89 --<br />

91 -- -- -- -- -- 97 -- -- --<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000250.tex) P–170


<strong>Java</strong>-Schulung<br />

Schritt 4:<br />

(Löschen der Vielfachen von 7)<br />

-- 2 3 -- 5 -- 7 -- -- --<br />

11 -- 13 -- -- -- 17 -- 19 --<br />

-- -- 23 -- -- -- -- -- 29 --<br />

31 -- -- -- -- -- 37 -- -- --<br />

41 -- 43 -- -- -- 47 -- -- --<br />

-- -- 53 -- -- -- -- -- 59 --<br />

61 -- -- -- -- -- 67 -- -- --<br />

71 -- 73 -- -- -- -- -- 79 --<br />

-- -- 83 -- -- -- -- -- 89 --<br />

-- -- -- -- -- -- 97 -- -- --<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000250.tex) P–171


<strong>Java</strong>-Schulung<br />

Als Ergebnis erhält man alle Primzahlen zwischen 1 und 100:<br />

2 3 5 7<br />

11 13 17 19<br />

23 29<br />

31 37<br />

41 43 47<br />

53 59<br />

61 67<br />

71 73 79<br />

83 89<br />

97<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000250.tex) P–172


<strong>Java</strong>-Schulung<br />

6.2.1.1 Variante 1<br />

Um dieses Verfahren zu Programmieren kann man man wie folgt vorgehen:<br />

1 public class Sieb<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 // 1. Deklaration der Variablen<br />

6 int i, j;<br />

7 int [] sieb = new int[101];<br />

8<br />

9 // 2. Initialisierung des Feldes, sieb[0] unbenutzt<br />

10 for (i=1; i


<strong>Java</strong>-Schulung<br />

20 if (sieb[i]>0)<br />

21 System.out.println(sieb[i]);<br />

22<br />

23 // 5. Beendes des Programms<br />

24 System.exit(0);<br />

25 }<br />

26 }<br />

Als Ausgabe erhält man:<br />

2 43<br />

3 47<br />

5 53<br />

7 59<br />

11 61<br />

13 67<br />

17 71<br />

19 73<br />

23 79<br />

29 83<br />

31 89<br />

37 97<br />

41<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000250.tex) P–174


<strong>Java</strong>-Schulung<br />

6.2.1.2 Variante 2<br />

Die Umsetzung des Verfahrens ist nicht besonders effektiv, daher werden einige Verbessungungen<br />

vorgenommen:<br />

1 public class Sieb2<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5<br />

6 // 1. Deklaration der Variablen<br />

7 int i, j;<br />

8 int [] sieb = new int[101];<br />

9<br />

10 // 2. Initialisierung des Feldes<br />

11 // Neu: Feld wird erst ab 2. Element initialisiert<br />

12 for (i=2; i


<strong>Java</strong>-Schulung<br />

19<br />

20 // Neu: Mit bereits gestrichenen Zahlen wird nicht mehr<br />

21 // gestrichen; gerade Zahlen werden übergangen<br />

22 for (i=3; i0)<br />

24 for (j=3*i; j


<strong>Java</strong>-Schulung<br />

6.2.1.3 Variante 3<br />

Als weitere Alternative kann man den Datentyp des Feldes von int auf boolean umstellen:<br />

1 public class Sieb3<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5<br />

6 // 1. Deklaration der Variablen<br />

7 int i, j;<br />

8 // Neu: Datentyp wird auf boolean umgestellt<br />

9 boolean [] sieb = new boolean[101];<br />

10<br />

11 // 2. Initialisierung des Feldes<br />

12 for (i=2; i


<strong>Java</strong>-Schulung<br />

20 for (i=3; i


<strong>Java</strong>-Schulung<br />

6.2.1.4 Variante 4<br />

Da die Zahl 2 die einzige gerade Primzahl ist, wird nur noch <strong>mit</strong> ungeraden Zahlen gearbeitet:<br />

1 public class Sieb4<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5<br />

6 // 1. Deklaration der Variablen<br />

7 int i, j;<br />

8 // Feldgrösse halbiert<br />

9 boolean [] sieb = new boolean[50];<br />

10<br />

11 // 2. Initialisierung des Feldes<br />

12 for (i=1; i


<strong>Java</strong>-Schulung<br />

20<br />

21 // 4. Ausgabe der Primzahlen<br />

22 System.out.println(2);<br />

23 for (i=1; i


<strong>Java</strong>-Schulung<br />

6.2.2 Zeitmessung: Sieb des Eratosthenes<br />

Um Laufzeit-Vergleiche durchzuführen, wird die Anzahl der Primzahlen bis 1 000 000 für alle<br />

4 Versionen bestimmt.<br />

6.2.2.1 Variante 1<br />

1 public class Sieba<br />

2 { public static void main(String args[])<br />

3 {<br />

4 int i, j;<br />

5 int [] sieb = new int[1000001];<br />

6 for (i=1; i


<strong>Java</strong>-Schulung<br />

6.2.2.2 Variante 2<br />

1 public class Sieb2a<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, j;<br />

6 int [] sieb = new int[1000001];<br />

7 for (i=2; i


<strong>Java</strong>-Schulung<br />

6.2.2.3 Variante 3<br />

1 public class Sieb3a<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, j;<br />

6 boolean [] sieb = new boolean[1000001];<br />

7 for (i=2; i


<strong>Java</strong>-Schulung<br />

6.2.2.4 Variante 4<br />

1 public class Sieb4a<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 int i, j;<br />

6 boolean [] sieb = new boolean[500000];<br />

7 for (i=1; i


<strong>Java</strong>-Schulung<br />

6.2.2.5 Ergebnisse<br />

Als Ergebnis der Zeitmessungen erhält man:<br />

Programmname Laufzeit in Sekunden<br />

Sieba 3.71<br />

Sieb2a 1.56<br />

Sieb3a 1.49<br />

Sieb4a 1.09<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000250.tex) P–185


<strong>Java</strong>-Schulung<br />

6.3 Schleifen und mehrdimensionale Felder<br />

Mehrdimensionale Felder werden in <strong>Java</strong> nicht unterstützt. Allerdings kann man ein Feld <strong>mit</strong><br />

Felder deklarieren und darauf (wie in C/C++) zugreifen.<br />

Diese mehrdimensionalen Felder können ebenfalls <strong>mit</strong>tels Schleifen bearbeitet werden, wobei<br />

für jede Dimension meist eine Laufvariable vorgesehen ist:<br />

Syntax:<br />

int i,j;<br />

int [][] name = new int[dimension][dimension]<br />

for(i=0;i


<strong>Java</strong>-Schulung<br />

Beispiel Addition zweier Matrizen:<br />

1 public class Schl02<br />

2 {<br />

3 public static void main(String args[])<br />

4 {<br />

5 // Deklarationen<br />

6 int i,j;<br />

7 int [][] mat_1 = new int[3][3];<br />

8 int [][] mat_2 = new int[3][3];<br />

9 int [][] mat_3 = new int[3][3];<br />

10<br />

11 // Initialisierung<br />

12 for(i=0;i


<strong>Java</strong>-Schulung<br />

21 // Addition der Matrizen<br />

22 for(i=0;i


<strong>Java</strong>-Schulung<br />

43<br />

44 // Ausgabe der Matrix mat_3<br />

45 for(i=0;i


<strong>Java</strong>-Schulung<br />

Als Ausgabe erhält man:<br />

1 2 3<br />

4 5 6<br />

7 8 9<br />

10 20 30<br />

40 50 60<br />

70 80 90<br />

11 22 33<br />

44 55 66<br />

77 88 99<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (j000260.tex) P–190


<strong>Java</strong>-Schulung<br />

Kapitel 7<br />

Exkurs<br />

7.1 Oft gemachte Fehler<br />

7.1.1 Semikolon am Ende<br />

Am Ende eines Befehls muss ein Semikolon stehen. Der folgende Programmcode erzeugt<br />

einen Fehler beim kompilieren.<br />

Falsch ist:<br />

public static void main(String args[])<br />

{<br />

int a;<br />

a=0<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–191


<strong>Java</strong>-Schulung<br />

}<br />

Richtig ist:<br />

public static void main(String args[])<br />

{<br />

int a;<br />

a=0;<br />

}<br />

7.1.2 Semikolon in der Mitte<br />

Ein zuviel gesetztes Semikolon innerhalb eines Befehls wird möglicherweise als Nullanweisung<br />

gesehen und führt zu verdeckten Fehlern. Der folgende Programmcode schreibt die Meldung<br />

Ende erreicht immer auf den Bildschirm und nicht nur im Falle i gleich 10, da das<br />

zusätzliche Semikolon die if -Bedingung beendet.<br />

Falsch ist:<br />

public static void main(String args[])<br />

{<br />

int i=5;<br />

if (i==10);<br />

System.out.println("Ende erreicht");<br />

}<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–192


<strong>Java</strong>-Schulung<br />

Richtig ist:<br />

public static void main(String args[])<br />

{<br />

int i=5;<br />

if (i==10)<br />

System.out.println("Ende erreicht");<br />

}<br />

Oder noch besser:<br />

public static void main(String args[])<br />

{<br />

int i=5;<br />

if (i==10)<br />

{<br />

System.out.println("Ende erreicht");<br />

}<br />

}<br />

7.1.3 Dezimalkomma statt Dezimalpunkt<br />

Zur Trennung der Nachkommastellen bei Dezimalzahlen muss ein Punkt (amerikanische<br />

Schreibweise) statt ein Komma verwendet werden. Der folgende Programmcode erzeugt eine<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–193


<strong>Java</strong>-Schulung<br />

Fehlermeldung.<br />

Falsch ist:<br />

double r=1,234;<br />

Richtig ist:<br />

double r=1.234;<br />

7.1.4 Gleichheitsoperator<br />

Der Operator = ist ein Zuweisungs-Operator. Der relationale Operator zum Testen der Gleichheit<br />

zweiter Werte heisst ==. Der folgende Ausdruck testet nicht, ob a gleich b ist, sondern<br />

weist a den Wert von b zu und testet dann, ob a ungleich 0 ist.<br />

Falsch ist:<br />

if (a=b) ...<br />

Richtig ist:<br />

if (a==b) ...<br />

7.1.5 if-Anweisung<br />

Die Bedingung eines if -Befehls muss immer in Klammern stehen, das Schlüsselwort then<br />

gibt es in <strong>Java</strong> nicht.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–194


<strong>Java</strong>-Schulung<br />

Falsch ist:<br />

if a >= 100 then<br />

...<br />

Richtig ist:<br />

if (a >= 100)<br />

...<br />

7.1.6 Mehrere Bedingungen<br />

Die logischen Operator zur Verknüpfung von Bedingungen lauten &, &&, | und ||. Die Operatoren<br />

&& und || sind schneller, da meist nicht alle Bedingungen zur Entscheidungsfindung<br />

ausgewertet werden müssen.<br />

if (i>0 & i0 && i


<strong>Java</strong>-Schulung<br />

7.1.7 break in der switch-Anweisung<br />

Jeder Fall der Anweisung switch muss <strong>mit</strong> einem break abgeschlossen werden, da<strong>mit</strong> die<br />

nachfolgenden Befehle nicht mehr ausgeführt werden. Der folgende Programmcode liefert<br />

nur dann das gewünschte Ergebnis, wenn i weder 10 noch 20 ist.<br />

switch(i)<br />

{<br />

case 10:<br />

System.out.println("i ist 10");<br />

case 20:<br />

System.out.println("i ist 20");<br />

default:<br />

System.out.println("i ist weder 10 noch 20");<br />

}<br />

Richtig ist:<br />

switch(i)<br />

{<br />

case 10:<br />

System.out.println("i ist 10");<br />

break;<br />

case 20:<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–196


<strong>Java</strong>-Schulung<br />

}<br />

System.out.println("i ist 20");<br />

break;<br />

default:<br />

System.out.println("i ist weder 10 noch 20");<br />

break;<br />

7.1.8 for-Schleife<br />

Die drei Ausdrücke in der Bedingung der for-Schleife müssen <strong>mit</strong> Semikolon getrennt werden<br />

und nicht beispielsweise <strong>mit</strong> Komma. Der folgende Programmcode liefert einen Syntaxfehler.<br />

Falsch ist:<br />

for (i=0, i!=10, i++) ...<br />

Richtig ist:<br />

for (i=0; i!=10; i++) ...<br />

7.1.9 Blockklammern<br />

Man sollte nicht vergessen Blockklammern zu setzen, wenn man durch die Anweisungen if,<br />

do oder while mehrere Befehle ausführen lassen will. Der folgende Programmcode erzeugt<br />

eine Endlosschleife.<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–197


<strong>Java</strong>-Schulung<br />

Falsch ist:<br />

public static void main(String args[])<br />

{<br />

int i=0;<br />

while (i < 10)<br />

System.out.println("Wert von i=" + i);<br />

i++;<br />

}<br />

Richtig ist:<br />

public static void main(String args[])<br />

{<br />

int i=0;<br />

while (i < 10)<br />

{<br />

System.out.println("Wert von i=" + i);<br />

i++;<br />

}<br />

}<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–198


<strong>Java</strong>-Schulung<br />

7.1.10 Geschachtelte if-Anweisungen<br />

Bei geschachtelten if -Anweisungen sind Blockklammern hilfreich. Der folgende Programmcode<br />

liefert als Ergebnis „i ist kleiner 0“.<br />

Falsch ist:<br />

public static void main(String args[])<br />

{<br />

int i=0;<br />

if (i >= 0)<br />

if (i != 0)<br />

System.out.println("i ist grösser 0");<br />

else<br />

System.out.println("i ist kleiner 0");<br />

}<br />

Richtig ist:<br />

public static void main(String args[])<br />

{<br />

int i=0;<br />

if (i >= 0)<br />

{<br />

if (i != 0)<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–199


<strong>Java</strong>-Schulung<br />

}<br />

System.out.println("i ist grösser 0");<br />

}<br />

else<br />

System.out.println("i ist kleiner 0");<br />

Oder noch besser:<br />

public static void main(String args[])<br />

{<br />

int i=0;<br />

if (i > 0)<br />

System.out.println("i ist grösser 0");<br />

else if (i < 0)<br />

System.out.println("i ist kleiner 0");<br />

else<br />

System.out.println("i ist gleich 0");<br />

}<br />

7.1.11 Ganzzahlige Division<br />

Falsch ist:<br />

public static void main(String args[])<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–200


<strong>Java</strong>-Schulung<br />

{<br />

}<br />

int i, sum=0, mean, fgr=5, feld [] = new int[fgr];<br />

for (i=0; i


<strong>Java</strong>-Schulung<br />

Falsch ist:<br />

public static void main(String args[])<br />

{<br />

int i=0, j=0;<br />

while (++i


<strong>Java</strong>-Schulung<br />

7.1.13 Feld-Überlauf<br />

Das erste Element eines Feldes der Größe n hat immer den Index 0, das letzte den Index<br />

n − 1. Es wird nicht geprüft, ob Feld-Zugriffe innerhalb der erlaubten Feld-Grenzen liegen.<br />

Beim ausführen des Programms erhält man die Fehlermeldung Exception in thread<br />

¨main¨ java.lang.ArrayIndexOutOfBoundsException.<br />

Falsch ist:<br />

public static void main(String args[])<br />

{<br />

int i, feld [] = new int[345];<br />

for (i=0; i


<strong>Java</strong>-Schulung<br />

}<br />

}<br />

feld[i] = i;<br />

7.1.14 Tippfehler bei Konstanten<br />

Numerische Konstanten sollte man zu Beginn des Programms festlegen. Sie sind dann leichter<br />

zu finden und man vermeidet Tippfehler. Der folgende Programmcode stürzt wegen eines<br />

Feld-Überlaufs ab.<br />

Falsch ist:<br />

public static void main(String args[])<br />

{<br />

int i, feld [] = new int[345];<br />

for (i=0; i


<strong>Java</strong>-Schulung<br />

}<br />

int i, fgr=345, feld [] = new int[fgr];<br />

for (i=0; i


<strong>Java</strong>-Schulung<br />

}<br />

}<br />

}<br />

break;<br />

Besser wäre:<br />

public static void main(String args[])<br />

{<br />

int i=0;<br />

while (true)<br />

{<br />

if (++i % 7 == 0)<br />

{<br />

break;<br />

}<br />

else<br />

{<br />

System.out.println(i);<br />

}<br />

}<br />

}<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–206


<strong>Java</strong>-Schulung<br />

7.2 Namenskonventionen<br />

Namenskonventionen erhöhen die Lesbarkeit eines Programms. Folgende Regeln haben sich<br />

durchgesetzt:<br />

Namen werden in der Regel sowohl <strong>mit</strong> Groß- als auch <strong>mit</strong> Kleinbuchstaben geschrieben.<br />

Dabei dienen die Großbuchstaben zum Trennen der Wortteile.<br />

Bsp.:<br />

DasIstEinLangerNamen<br />

Variablennamen beginnen immer <strong>mit</strong> einem Kleinbuchstaben<br />

Bsp.:<br />

nummer, alter, meinAlter, ganzeZahl<br />

Konstantennamen (d.h. Namen von Variablen, die nicht mehr geändert werden können) bestehen<br />

nur aus Großbuchstaben. Dabei dient der Unterstreichungsstrich zum Trennen der<br />

Wortteile.<br />

Bsp.:<br />

ANZAHL, MATRIX_RANG<br />

Methodennamen beginnen <strong>mit</strong> einem Kleinbuchstaben, wobei ihre Funktion sich im Namen<br />

wiederspiegeln soll.<br />

Bsp.:<br />

berechne, druckeErgebnis, zeichneKreis<br />

Klassennamen beginnen <strong>mit</strong> einem Großbuchstaben. Da der Klassenname <strong>mit</strong> dem Dateinamen<br />

übereinstimmen muss, unterliegt er auch den Regeln des Betriebssystems.<br />

Bsp.:<br />

Beispiel1, ErstesBeispiel<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (fehler.tex) P–207


<strong>Java</strong>-Schulung<br />

Inhaltsverzeichnis<br />

I <strong>Prozedurale</strong> <strong>Programmierung</strong> <strong>mit</strong> <strong>Java</strong> P–1<br />

2 Bezeichner, Variablen, Kommentare P–2<br />

2.1 Bezeichner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–2<br />

2.2 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–5<br />

2.2.1 Initialisierung von Variablen . . . . . . . . . . . . . . . . . . . . P–9<br />

2.2.2 Schlüsselworte . . . . . . . . . . . . . . . . . . . . . . . . . . . P–10<br />

2.3 Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–11<br />

2.3.1 Zeilenkommentare . . . . . . . . . . . . . . . . . . . . . . . . . P–12<br />

2.3.2 Blockkommentare . . . . . . . . . . . . . . . . . . . . . . . . . P–13<br />

2.3.3 HTML-Kommentare . . . . . . . . . . . . . . . . . . . . . . . . P–14<br />

3 Datentypen und Konstanten P–16<br />

3.1 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–16<br />

3.1.1 Ganze Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–17<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (toc) II–i


<strong>Java</strong>-Schulung<br />

3.1.2 Ausgabe von ganzen Zahlen . . . . . . . . . . . . . . . . . . . . P–21<br />

3.1.3 Gleitkomma-Zahlen (Gleitpunkt-Zahlen) . . . . . . . . . . . . . P–27<br />

3.1.4 Boolsche Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . P–29<br />

3.1.5 Zeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–29<br />

3.2 Datentyp-Umwandlungen . . . . . . . . . . . . . . . . . . . . . . . . . . P–30<br />

3.2.1 Aufwand für Konvertierungen . . . . . . . . . . . . . . . . . . . P–31<br />

3.3 Literale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–33<br />

3.3.1 Ganzzahlige Konstanten . . . . . . . . . . . . . . . . . . . . . . P–34<br />

3.3.2 Gleitkomma-Konstanten . . . . . . . . . . . . . . . . . . . . . . P–35<br />

3.3.3 Zeichen-Konstanten . . . . . . . . . . . . . . . . . . . . . . . . P–36<br />

3.3.4 Zeichenketten-Konstanten . . . . . . . . . . . . . . . . . . . . . P–37<br />

3.3.5 Boolsche Konstanten . . . . . . . . . . . . . . . . . . . . . . . . P–38<br />

4 Operatoren P–39<br />

4.1 Zuweisungsoperator (=) . . . . . . . . . . . . . . . . . . . . . . . . . . . P–39<br />

4.2 Arithmetische Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . P–43<br />

4.2.1 Arithmetik von Gleitkommazahlen . . . . . . . . . . . . . . . . . P–48<br />

4.2.2 Verkürzte Schreibweisen . . . . . . . . . . . . . . . . . . . . . . P–50<br />

4.2.3 Inkrement- und Dekrement-Operatoren . . . . . . . . . . . . . . P–51<br />

4.3 Vergleichsoperatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–55<br />

4.4 Logische Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–56<br />

4.4.1 Wahrheitstafeln . . . . . . . . . . . . . . . . . . . . . . . . . . . P–59<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (toc) II–ii


<strong>Java</strong>-Schulung<br />

4.4.2 Bitweise Operatoren . . . . . . . . . . . . . . . . . . . . . . . . P–62<br />

4.4.3 Verkürzte logische Operatoren . . . . . . . . . . . . . . . . . . . P–76<br />

5 Verzweigungen P–77<br />

5.1 Entscheidungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–77<br />

5.1.1 if-Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . P–78<br />

5.1.2 if...else-Anweisung . . . . . . . . . . . . . . . . . . . . . P–81<br />

5.1.3 Bedingte Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . P–88<br />

5.1.4 Geschachtelte if- oder if...else-Anweisungen . . . . . . . P–91<br />

5.1.5 switch-Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . P–94<br />

5.2 Wiederholungen (Schleifen) . . . . . . . . . . . . . . . . . . . . . . . . P–105<br />

5.2.1 while-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . P–106<br />

5.2.2 Geschachtelte while-Schleifen . . . . . . . . . . . . . . . . . . P–111<br />

5.2.3 do...while-Schleife . . . . . . . . . . . . . . . . . . . . . . P–113<br />

5.2.4 Geschachtelte do...while-Schleifen . . . . . . . . . . . . . . P–119<br />

5.2.5 for-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–122<br />

5.2.6 Geschachtelte for-Schleifen . . . . . . . . . . . . . . . . . . . P–131<br />

5.2.7 Weitere Anwendungen für Schleifen . . . . . . . . . . . . . . . . P–135<br />

5.2.8 Die Anweisung break . . . . . . . . . . . . . . . . . . . . . . . P–143<br />

5.2.9 Die Anweisung continue . . . . . . . . . . . . . . . . . . . . P–147<br />

5.2.10 Benannte Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . P–150<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (toc) II–iii


<strong>Java</strong>-Schulung<br />

6 Felder (Arrays oder Vektoren) P–155<br />

6.1 Anlegen eines Feldes . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–158<br />

6.1.1 Deklaration eines Feldes . . . . . . . . . . . . . . . . . . . . . . P–158<br />

6.1.2 Allokierung eines Feldes . . . . . . . . . . . . . . . . . . . . . . P–159<br />

6.1.3 Initialisierung eines Feldes . . . . . . . . . . . . . . . . . . . . . P–160<br />

6.1.4 Gleichzeitiges Deklarieren, Allokieren und Initialisieren . . . . . P–161<br />

6.2 Schleifen und Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–165<br />

6.2.1 Beispiel: Sieb des Eratosthenes . . . . . . . . . . . . . . . . . . P–167<br />

6.2.2 Zeitmessung: Sieb des Eratosthenes . . . . . . . . . . . . . . . . P–181<br />

6.3 Schleifen und mehrdimensionale Felder . . . . . . . . . . . . . . . . . . P–186<br />

7 Exkurs P–191<br />

7.1 Oft gemachte Fehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–191<br />

7.1.1 Semikolon am Ende . . . . . . . . . . . . . . . . . . . . . . . . P–191<br />

7.1.2 Semikolon in der Mitte . . . . . . . . . . . . . . . . . . . . . . . P–192<br />

7.1.3 Dezimalkomma statt Dezimalpunkt . . . . . . . . . . . . . . . . P–193<br />

7.1.4 Gleichheitsoperator . . . . . . . . . . . . . . . . . . . . . . . . . P–194<br />

7.1.5 if-Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–194<br />

7.1.6 Mehrere Bedingungen . . . . . . . . . . . . . . . . . . . . . . . P–195<br />

7.1.7 break in der switch-Anweisung . . . . . . . . . . . . . . . . . . P–196<br />

7.1.8 for-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–197<br />

7.1.9 Blockklammern . . . . . . . . . . . . . . . . . . . . . . . . . . . P–197<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (toc) II–iv


<strong>Java</strong>-Schulung<br />

7.1.10 Geschachtelte if-Anweisungen . . . . . . . . . . . . . . . . . . . P–199<br />

7.1.11 Ganzzahlige Division . . . . . . . . . . . . . . . . . . . . . . . . P–200<br />

7.1.12 Nebeneffekte in logischen Ausdrücken . . . . . . . . . . . . . . P–201<br />

7.1.13 Feld-Überlauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–203<br />

7.1.14 Tippfehler bei Konstanten . . . . . . . . . . . . . . . . . . . . . P–204<br />

7.1.15 Wirkungsloses break . . . . . . . . . . . . . . . . . . . . . . . . P–205<br />

7.2 Namenskonventionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . P–207<br />

c○ MMI Joachim u. Marion Lammarsch, Rothenberg (toc) II–v

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!