Teil I Prozedurale Programmierung mit Java - Urz
Teil I Prozedurale Programmierung mit Java - Urz
Teil I Prozedurale Programmierung mit Java - Urz
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