Dies ist eine alte Version des Dokuments!
…von sehr einfachen Java-Klassen .
public class Klassenname { // Instanzvariablen ... /** * Konstruktor für Objekte der Klasse Test */ public Test() { // Instanzvariablen initialisieren ... } //Methoden public void beispielMethode() { ... } }
Jeder Java-Anweisungsblock fängt mit einem {
an und hört auf mit }
.
Wie viele Blöcke sind in obiger Klasse?
Folgendes in die Methode eintippen
public void beispielMethode() { System.out.println("Tach auch!"); }
Wie bekommt man nun die Ausgabe auf den Bildschirm?
Dazu müssen wir erst den Umgang mit BlueJ lernen…
(Bitte anschließend zurückkommen und an dieser Stelle weiterlesen )
In diesem Fall brauchen wir weder einen Konstruktor noch Instanzvariablen. Einfach ausprobieren; es müsste in einem Terminal "Tach auch!" erscheinen.
println()
ist eine Methode, um auf der Ausgabe (out
) des Systems (System
, der Rechner) zu erhalten (im Endeffekt ist das hier unser Terminal auf dem Bildschirm).
public void beispielMethode() { System.out.println("Ich lerne Java!"); System.out.println("Alles klar?!"); }
Jetzt sieht man weitere Sätze auf dem Bildschirm.
Der Bildschirm soll leer erscheinen, wenn man anfängt? Dazu muss man in den Optionen der Konsole den Menüpunkt Konsole löschen bei Methodenaufruf auswählen.
Ein paar Mal das obige Beispiel ausprobieren
In Java gibt es auch die Methode print()
anstelle von println()
. Ausprobieren – ausführen – sehen, was passiert: Unterschied gemerkt?
Manchmal ist es nützlich eine freie Zeile zu haben. Versuche folgende Ausgabe zu erhalten:
Ich lerne Java! Alles klar?!
Alles klar soweit? Dann weiter; ansonsten weiter ausprobieren bitte!
Jetzt einiges zu den Eingaben:
Wenn wir wollen, dass der Computer Eingaben von User1) einliest, brauchen wir etwas, worin diese Eingabe abgespeichert wird, bevor es verarbeitet werden kann: Eine Variable. Es gibt dabei verschiedene Typen von Variablen und zudem mit unterschiedlichen Datenbereichen. Di am häufigsten benutzten hast du ja bereits kennengelert…
Und wie werden diese Variablen deklariert? Oben haben wir gesehen, dass es einen Instanzavariablen-Bereich gibt. An der Stelle wird die Deklaration stattfinden, aber nicht nur dort…
Einige Beispiele:
int meinAlter; String kommentar;
oder allgemeiner:
Variablentyp Variablenbezeichner;
Um Variablen Werte zuzuweisen muss man folgende Syntax anwenden:
variablenName = wert;
Das kann man überall in einem { … }
-Block an entsprechender Stelle tippen.
Beispiel:
public class Beispiel { int meinAlter; String kommentar; public void beispiel() { meinAlter = 19; kommentar = "Hallo! Ich lerne Java."; System.out.println(kommentar); System.out.println("Ich bin " + meinAlter + " Jahre alt."); } }
Abschreiben, ausführen, sehen, was passiert!
Dies ist auch bei der Variablendeklaration möglich; Diese Zuweisung heißt dann Initialisierung, weil es eine Erstzuweisung ist.
public class Beispiel { int meinAlter = 19; String kommentar = "Hallo! Ich lerne Java."; public void beispiel() { System.out.println(kommentar); System.out.println("Ich bin " + meinAlter + " Jahre alt."); } }
Wie lese ich Eingaben von einem Benutzer ein? Das ist bei Java nicht wirklich einfach. Java wurde so entwickelt, dass Funktionalität und Plattformunabhängigkeit möglichst groß gehalten wurden. Dazu mussten viele Dinge abstrahiert werden. Diese sind dann in sehr allgemeiner Form implementiert worden, sodass insbesondere Anfänger auf große Schwierigkeiten stoßen, wenn sie diese benutzen wollen.
Leider betrifft das auch die Eingabe…
Daher benutzen wir hier eine Klasse, die uns diese komplexe Arbeit abnimmt: Prog1Tools. Wenn dieses Paket auf dem PC eingerichtet ist, wird unser Leben mit Java deutlich erleichtert…
Ähnlich dem print
oder println
gibt es in dann die Befehle read<Typ>
und readln<Typ>
.
Beispiel:
import Prog1Tools.IOTools; public class Beispiel { int deinAlter; String kommentar; public void beispiel() { deinAlter = IOTools.readInteger("Wie alt bist du? "); kommentar = IOTools.readString("Gib mir ein Kommentar: "); System.out.println(kommentar); System.out.println("Du bist " + deinAlter + " Jahre alt."); } }
Abschreiben, ausführen, sehen, was passiert!
OK, jetzt weißt du wie man Eingaben vom Benutzer einliest. Aber warte! Wenn ich 23.5 bei Wie alt bist du?
eintippe erhalte ich eine Fehlermeldung! Jepp, das ist richtig! Der Wert auf diese Frage wird in meinAlter
abgespeichert.
meinAlter
ist aber eine Integer-Variable (Typ int
). Also werden nur ganze Zahlen (Integer) akzeptiert. Mehr is' nicht! Wenn man Dezimalbrüche in der Variable meinAlter
speichern will, muss double
anstelle von int
benutzt werden.
"Aber wenn ich's nach double
ändere, werden seltsame fehlerhafte Zahlen ausgegeben" – wirst du sagen; Doch: Nein, das ist kein Müll da auf dem Bildschirm. Es ist die exponentielle Darstellung der Zahl. Für Normalsterbliche wäre eine Darstellung mit 3 oder 4 Stellen hinter dem Komma angenehmer. Versuche folgende Veränderung vorzunehmen:
import Prog1Tools.IOTools; public class Beispiel { int deinAlter; String kommentar; public void beispiel() { deinAlter = IOTools.readInteger("Wie alt bist du? "); kommentar = IOTools.readString("Gib mir ein Kommentar: "); System.out.println(kommentar); System.out.println("Du bist " + deinAlter + " Jahre alt."); } }
Ersetzen durch:
import Prog1Tools.IOTools; public class Beispiel { double deinAlter; String kommentar; public void beispiel() { deinAlter = IOTools.readDouble("Wie alt bist Du? "); kommentar = IOTools.readString("Gib mir ein Kommentar: "); System.out.println(kommentar); String format = "Du bist also %5.3f Jahre alt.\n"; System.out.printf(format, deinAlter); } }
Was bedeutet das? Wieso irgendwie %5.3f
und so seltsam? Bei Dezimalbrüchen (double
) bedeutet das:
Zeige (mindestens) 5 Stellen, davon 3 Stellen hinter dem Komma2).
Wenn wir also 23.5
für meinAlter
eingeben, wird ausgegeben:
Ich bin 23,500 Jahre alt.
Probiere es anstelle von %5.3f
mit anderen Zahlen aus. Sei kreativ!
Die Frage, ob wir das auch bei Strings machen können, drängt sich natürlich an dieser Stelle auf… Ausprobieren
Siehe: Beispiele zu System.out.printf.
import …
3)? System.out.print()
, System.out.println()
und System.out.printf()
?
Java ist auch fähig zu rechnen, was das Programmieren erheblich erleichtert. Hier folgen jetzt ein paar Veinbarungen:
Zum Rechnen braucht man Operatoren. Zur Verfügung stehen standardmäßig folgende:
===== Arithmetische Operatoren =====
^ Operator ^ Beispiel ^ Bedeutung ^
| +
| x + y
|Addition |
| -
| x - y
|Subtraktion |
| *
| x * y
|Multiplikation |
| /
| x / y
|Division |
| %
| x % y
|Modulo |
Um den Operator Modulo (%
) zu verstehen, sollte man einige Beispiele durchrechnen. Aber soviel vorweg: Damit wird eine ganzzahlige Division durchgeführt und als Ergebnis der Restwert geliefert.
Beispiel:
<code java>
public void bespielOperation() {
int x = 28;
int y = 8;
System.out.println(x + y); = 36
System.out.println(x - y); // = 20 System.out.println(x * y); // =224 System.out.println(x / y); // = 3 System.out.println(x % y); // = 4 }
</code>
Probiere auch andere Werte aus, bis du zu allen Operationen ein Aha-Erlebnis hast.
Ach ja: Hast du gemerkt, dass der Ergebnistyp von den Typen der Zahlen in der Rechnung abhängt? Wie? Ausprobieren und folgende Tabelle ausfüllen:
Operator | + | - | * | / | % |
---|---|---|---|---|---|
int op int | |||||
double op int | |||||
double op double |
Sie weisen einer Variablen einen Wert zu. Der häufigste Zuweisungsoperator ist =. Beispiel:
X = 1; X = a + b;
Für einige Zuweisungen in der Form x = x … y - wobei zwischen x und y natürlich ein arithmetischer Operator steht - bietet Java eine verkürzte Schreibweise: Operator Beispiel Bedeutung += x += y x = x + y -= x -= y x = x - y *= x *= y x = x * y /= x /= y x = x / y %= x %= y x = x % y Inkrement- und Dekrement-Operatoren
Oft soll der Wert einer int-Variablen um 1 erhöht oder vermindert werden. Auch hierfür bietet Java eine spezielle Operatoren an. Operator Ausdruck Bedeutung ++ ++x x = x + 1
x++ x = x + 1
– –x x = x - 1
x-- x = x - 1
Hier ist zu beachten, dass es einen Unterschied gibt, wenn man den Inkrement- bzw. Dekrement - Operator vor oder hinter dem Variablennamen stellt. Der Unterschied wird in folgendem Beispiel deutlich gemacht:
y = x++
y erhält den Wert von x, danach wird x inkrementiert
z = ++x
x wird zuerst inkrementiert, dann wird z der neue Wert von x zugewiesen
/
) und Modulo (%
): Wenn beide Zahlen den Typ Integer haben, kommt auch Integer raus. Ansonsten – auch wenn nur eine Zahl Real sein sollte – wird das Ergebnis Real. o Integer mit Integer = Integer o Integer mit real = real o real mit real = real • Division (/): Liefert immer Real als Ergebnis. • Eine besondere Art der Division (Div): Fast dasselbe wie (/), aber es liefert stets ein Integer-Ergebnis.
Schön und gut, aber wie wird das umgesetzt?
Gleichungen, wie wir sie kennen… …werden zu : y = 5 • 3 y:=5*3; (y kann sowohl Integer als auch real sein) z = 5 + 4 • 3 z:=5+4*3; (z kann sowohl Integer als auch real sein) a = 3,14 • 7 • 7 a:=3.14*7*7; (a ist immer real) b = 14 • (5 + a) b:=14*(5+a); (b hängt von a ab, wenn a real ist, ist b immer real. Wenn a Integer ist, kann b real oder Integer sein).
OK, das sind relativ einfache Beispiele. Aber man sollte sie gut kennen. Wie sieht’s jetzt mit der besonderen Art der Division aus?
a:=22/7; wenn a real ist, ergibt das 3.142856 … usw. anderenfalls eine Fehlermeldung b:=22 div 7; b ist immer Integer und erhält den Wert 3. Div rundet immer ab. Selbst 11 div 4 würde 3 ergeben, obwohl der Otto-Normal-Verbraucher 3,75 auf 4 aufrunden würde…
Pascal kann aber Real-Werte zu Integer-Werten konvertieren: mit den Befehlen Trunc und Round. Trunc verhält sich ähnlich wie Div; es rundet stets ab. Round ist ein wenig moderater: es rundet zur nächsten ganzen Zahl. Ü-berprüfe die unten stehenden Zeilen, um dir ein Bild davon zu machen:
USES crt; BEGIN
clrscr; writeln(Trunc(12.31)); writeln(Round(12.31)); writeln(Trunc(31.49)); writeln(Round(31.49)); writeln(Trunc(44.59)); writeln(Round(44.59)); readln;
END;
f
wird übrigens festgelegt, dass es sich um eine Gleitkommazahl (float/double) handelt, die an deise Stelle kommt.import Prog1Tools.IOTools;