Dies ist eine alte Version des Dokuments!
Übersicht über die bisherige Syntax
Bezeichner:
Bezeichner müssen in Java mit einem Buchstaben, einem Unterstrich (_) oder einem Dollar-zeichen ($) beginnen. Sie dürfen nicht mit einer Ziffer anfangen. Nach dem ersten Zeichen können Bezeichner jede beliebige Kombination von Buchstaben und Ziffern enthalten (aber keine Umlaute, kein ß, kein Leerzeichen und keine Satzzeichen!)
Datentypen:
Einfache Datentypen: Ganzzahl-Typen
Typ | Größe | Wertebereich |
---|---|---|
byte | 8 Bit | -128 bis 127 |
short | 16 Bit | -32.768 bis 32.767 |
int | 32 Bit | -2.147.483.648 bis 2.147.483.647 |
long | 64 Bit | -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 |
Kommazahltypen
Typ | Genauigkeit | Wertebereich |
---|---|---|
float | Ca. 7 Ziffern | 1.4E-45 bis 3.4E+38 positiv und negativ |
double | Ca. 16 Ziffern | 4.9E-324 bis 1.7E+308 positiv und negativ |
Weitere Typen
Typ | Erklärung |
---|---|
boolean | Hat nur die Werte „true“ und „false“ (Ja-Nein) |
char | Für Zeichen wie ‘a‘ oder ‘Q‘ oder ‘!‘ |
String-Typ
Typ | Erklärung |
---|---|
String | Eine Zeichenkette, z.B. „Das Haus mit der Nummer 3“ |
Typumwandlung:
In JAVA müssen sehr häufig Datentypen ineinander umgewandelt werden. Dazu sind alle einfachen Datentypen zusätzlich als Klassen implementiert, die entsprechende Umwandelmethoden besitzen.
Die wichtigsten Methoden sind die parse-Methoden, die Strings in Zahlen verwandeln.
Integer.parseInt(String)
Long.parseLong(String)
Double.parseDouble(String)
usw. Argument der Methoden ist jeweils ein String
Dazu kommen die toString-Methoden, die Zahlen in Strings verwandeln.
Integer.toString(int)
Long.toString(long)
Double.toString(double)
usw. Argument ist eine Zahl oder Variable des passenden Typs.
Alternativ kann diese Aufgabe mit der valueOf
-Methode von String gelöst werden.
String.valueOf(typ)
Typ darf dabei irgendeine Zahl oder Variable eines Zahltyps sein.
Um Zahlen ineinander umzuwandeln, gibt es einmal das Typcasting. Man schreibt den gewünschten Typ in Klammern davor.
Z.B. (double) zahl macht aus der int
oder long
-Variablen zahl eine Kommazahl
(long) zahl macht aus der double-Variablen zahl eine Kommazahl, indem die Nachkommastellen abgeschnitten werden.
Will man klassisch runden, benötigt man eine Methode der Klasse Math
, nämlich
Math.round(double)
rundet zu einer long-Zahl
Packages:
Um eine Klasse zu verwenden, die in einem Paket enthalten ist, können Sie eine der drei folgenden Techniken verwenden:
- Wenn sich die gewünschte Klasse in java.lang (z. B. System, Math oder Date) befindet, können Sie diese Klasse einfach benutzen, indem Sie sich auf den Namen dieser Klasse beziehen. Die java.lang-Klassen sind für Sie in allen Ihren Programmen automatisch verfügbar.
- Wenn sich die gewünschte Klasse in einem anderen Paket befindet, können Sie sich auf diese anhand des kompletten Namens, einschließlich des Paketnamens (z. B. java.awt.Font), beziehen.
- Bei häufig verwendeten Klassen aus anderen Paketen können Sie einzelne Klassen oder auch das gesamte Paket importieren. Sobald eine Klasse oder ein Paket importiert wurde, können Sie sich darauf beziehen, indem Sie den Namen der Klasse verwenden.
Die IF-ELSE-Verzweigung
Dabei ist Expression ein Wert vom Typ boolean, wie er typischerweise durch einen Vergleich entsteht. Statement ist eine Anweisung. Das kann eine einfache Anweisung oder ein Anweisungsblock sein.
Die FOR-Schleife
• Anfangs werden (Zähl-)Variablen (ggf. definiert und) initialisiert (Init). Solange die Schleifenbedingung (Expr) true ergibt, wird der Schleifenrumpf (Statement) wiederholt ausgeführtAnschließend werden die (Zähl-)Variablen aktualisiert (Update) und der Ausdruck erneut überprüft. Die Aktualisierung bedeutet häufig, das die Zählvariable um 1 erhöht wird (zaehler++)
Die Elemente der grafischen Benutzeroberfläche (GUI).
Unsere Programme sind vorläufig alle aus jFrame abgeleitet, einer speziellen Fensterklasse. Wenn wir ein Programm geschrieben haben, haben wir einen Nachfolger von JFrame erschaffen. Die Methoden von jFrame haben wir nicht benötigt, das macht der JAVA-Editor für uns. Auf diesem JFrame haben wir Objekte platziert, die Instanzen vorgegebener Klassen sind. Im einzelnen:
jLabel: Instanzen dieses Objekts schreiben einen festen Text an eine Stelle des jFrame. Eigenschaften, insbesondere den Text bearbeitet man mit dem Objektinspektor. Einzig verwendete Methode:
setVisible(boolean) kein Rückgabewert
jTextField: Instanzen dieses Objekts ermöglichen Ein- und Ausgabe von Strings. Eigenschaften wie Größe, Anfangstext, usw. bearbeitet man mit dem Objektinspektor. Verwendete Methoden:
setVisible(boolean) | kein Rückgabewert |
getText() | gibt einen String zurück |
setText(String) | kein Rückgabewert |
jTextArea: Instanzen dieses Objekts ermöglichen die Ausgabe längerer Texte, die später noch verändert werden können. Verwendete Methoden:
setVisible(boolean) | kein Rückgabewert |
setText(String) | kein Rückgabewert, setzt den ersten Text |
append(String) | kein Rückgabewert, hängt an den bisherigen Text den String an |
jButton: Instanzen dieses Objekts dienen der Programmablaufsteuerung. Zu jedem Knopf gehört eine Methode, die ausgeführt wird, wenn der Knopf gedrückt wird. Diese Methode wird vom Editor erzeugt und ist zunächst leer. Indem wir dort Programmcode hineinschreiben, erstellen wir bisher unsere Programme. Verwendete Methoden: brauchen wir vorläufig nicht!
Weitere Schleifenarten
Die Aufgabe 10 zu Ulams Folge aus dem Kapitel 8 ist nur ungünstig mit einer FOR-Schleife zu lösen. Es gibt zwei weitere Schleifenarten in JAVA, bei denen die Zahl der Durchläufe nicht bekannt sein muss. Sinnvoll ist hier eine DO-WHILE-Schleife oder eine WHILE-Schleife.
Eine DO-WHILE-Schleife besitzt folgendes Syntax-Diagramm:
Der Schleifenrumpf wird ausgeführt und dann wird überprüft, ob der Ausdruck (Expression) true ist oder false. Im Falle true wird die Schleife noch einmal ausgeführt. Da die Prüfung am Ende stattfindet, wird die DO-WHILE-Schleife immer mindestens einmal ausgeführt.
Die WHILE-Schleife prüft ihre Bedingung bereits am Anfang und wird daher nicht zwangsläufig einmal ausgeführt:
Wir programmieren die Aufgabe 10 zur Ulam-Folge aus dem Kapitel 8 noch einmal mit einer DO-WHILE-SCHLEIFE:
public void jButton1_ActionPerformed(ActionEvent evt) { long zahl = Long.parseLong(jTextField1.getText()); long zaehler = 0; // komplizierte Schleife: do { if (zahl % 2 == 0) zahl = zahl/2; else zahl = zahl*3 + 1; zaehler++; } while (zahl != 1) ; jTextField2.setText(Long.toString(zaehler));
Aufgaben zu DO-WHILE- und WHILE-Schleifen
Aufgabe 1
int n=0; do { n = n+1; } while(n<10);
int k=1; int n=1; do { k++; n = n*k; } while(k<4);
int k = 0; while(k<5) { k++; } int n = 1; int k = 1; while(k<10) { n=n*2; k++; }
Aufgabe 2
Löse die Strafarbeit des kleinen Gauß mit einer WHILE und einer DO-WHILE-Schleife.
Aufgabe 3
Löse Ulams Folge mit einer WHILE-Schleife. Welchen Vorteil hat diese Lösung?
Aufgabe 4
Die Weltbevölkerung betrug im Januar 2006 ca. 6,5 Milliarden Menschen. Sie wächst jedes Jahr um 1,8%. Bestimme mit einem Programm das Jahr, an dem eine eingebbare Obergrenze überschritten wird. Wie würdest du diese Aufgabe rechnerisch lösen?
Aufgabe 5
Ein Käfer kriecht auf einen Halm, in dessen Mitte er sitzt, zufällig jede Minute 1 cm nach rechts oder 1 cm nach links mit gleicher Wahrscheinlichkeit. Schreibe eine Simulation, die prüft, nach wie viel Schritten der Käfer den rechten Rand des Halms 7cm von seinem Startpunkt entfernt erreicht. Solche Probleme bezeichnet man als „Irrfahrten“.
Aufgabe 6
Schreibe ein Programm, das alle Primzahlen bis zu einer vorgegebenen Obergrenze sucht. Als Hilfe: es handelt sich hier um zwei geschachtelte Schleifen, wobei die äußere die Testzahlen durchläuft, die innere die Teiler der Testzahl. Gehe mit folgenden Schritten vor:
- Überlege, was eingegeben und was ausgegeben wird.
- Spiele die Überlegungen für dich selbst mit Zahlen zwischen 100 und 110 durch.
- Erstelle ein Struktogramm.
- Erstelle das JAVA-Programm.
- Teste das Programm für die Obergrenze 110.
- Überlege, welche Verbesserungen möglich sind, damit die Suche schneller wird.