Die Struktur

…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 }.

Frage

Wie viele Blöcke sind in obiger Klasse?

Beispiel

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 :-) )

Weiter geht's!

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).

Weiteres Beispiel

    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 8-o

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!

Eingaben

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. Die am häufigsten benutzten hast du ja bereits kennengelert…

Variablendeklaration

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!

Formatierte Ausgabe

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.

Fragen

Verständnisfragen

  1. Was bedeutet "strukturiert Programmieren"?
  2. Wofür steht die Zeile import … 3)?
  3. Java Programme fangen immer mit __________ an und beinhalten __________.
  4. Java Klassen fangen immer mit __________ an und beinhalten __________.
  5. Was ist der Unterschied zwischen System.out.print(), System.out.println() und System.out.printf()?
  6. Wie kann man zwei leere Zeilen auf dem Bildschirm ausgeben?
  7. Nenne mindestens 5 Datentypen mit deren Wertebereich und Art!
  8. Wie kann man eine Eingabe einlesen?
  9. Was ist der Unterschied zwischen den einzelnen .readXXX-Methoden?
  10. Wieso kann man den Wert 0.75 Integer-Variablen nicht zuweisen?
  11. Wie werden Variablen in Java deklariert? Wie werden ihnen Werte zugewiesen?
  12. Mit welchem Tastenkürzel werden Programme in BlueJ übersetzt/kompiliert?
  13. Wie können wir Dezimalbrüche auf 3 Stellen vor und hinter dem Komma beschränken?
  14. Kann der Wert "1/4" double-Variablen zugewiesen werden?

Programmieren

  1. Schreibe ein Programm, das deinen Namen und dein Alter auf dem Bildschirm ausgibt.
  2. Schreibe ein Programm, das ein Kommentar von Benutzer einliest und eine Mindestbreite von 20 Zeichen hat.
  3. Schreibe ein Programm, das die Kreisfläche berechnet. Begrenze das Ergebnis auf 3 Stellen vor und 4 Stellen hinter dem Komma.

Rechnen mit Java

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:

    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
    }

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 int
double op int double
double op double double

Zuweisungsoperatoren

Wie weist man einer Variablen (sagen wir x) einen Wert zu? Das passiert mit dem Gleichheitszeichen (=).

Beispiel:

     x = 1; 
     x = a + b;

Für einige Zuweisungen in der Form x = x op y - wobei op ein arithmetischer Operator steht - bietet Java eine verkürzte Schreibweise:

OperatorBeispielBedeutung
+= 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

Diese Schreibweise lässt sich (meiner Meinung nach) ganz gut auf folgende Weise interpretieren und merken:

Erhöhe/reduziere/vervielfache/teile linke Seite um rechte Seite.

Nur bei dem Modulo-Operator macht dieser Merksatz keinen Sinn… :-)

Neben diesen arithmetischen Operatoren und den Zuweisungsoperatoren gibt es noch…

Inkrement- und Dekrement-Operatoren

Es ist oft so, dass der Wert einer int-Variablen um 1 erhöht oder vermindert wird. Auch hierfür bietet Java spezielle Operatoren an, nämlich:

Operator Ausdruck Bedeutung
++ ++x x = x + 1
x++ x = x + 1
-- --x x = x - 1
x-- x = x - 1

ACHTUNG! Es macht einen Unterschied, wenn man den Inkrement- bzw. Dekrement-Operator _vor_ oder _hinter_ dem Variablennamen stellt. Dazu ein Beispiel, um den Unterschied zu verdeutlichen:

   y = x++;

y erhält den Wert von x, erst danach wird x inkrementiert.

    z = ++x;

x wird zuerst inkrementiert, dann wird z dieser neue Wert von x zugewiesen.

* Addition (+), Subtraktion (–), Multiplikation (*), Division (''/'') 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;

1) Nutzer
2) mit dem f wird übrigens festgelegt, dass es sich um eine Gleitkommazahl (float/double) handelt, die an deise Stelle kommt.
Siehe auch Java-API zu System.out.printf
3) z.B. import Prog1Tools.IOTools;
start/info/11if/java_struktur.txt · Zuletzt geändert: 26.03.2015 12:07 von epunkta
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0