Grundlagen Java
Transcription
Grundlagen Java
-1- Grundlagen Java Zahlen Für Ganzzahlen gibt es u.a. int (mögliche Werte: -2 Mrd. bis +2 Mrd.) und long (mögliche Werte: - 9 Trio bis +9 Trio). Für Kommazahlen gibt es double und float Dezimaltrennzeichen ist der Punkt, nicht das Komma! Wird eine float-Variable mit einer Zahl (einem sog. "Literal") initialisiert, muss "f" angehängt werden, sonst interpretiert sie der Compiler automatisch als "double"! float z1 = 3.7f; // sonst gibt´s die Fehlermeldung "incompatible types" double z2 = 4.9; // an double-Variablen muss nichts angehängt werden Umwandeln Text int int x = parseInt(txtEingabe.getText()); // den Inhalt des Textfeldes "txtEingabe" auslesen und in einen int umwandeln Umwandeln int Text int x = 100; String abc = String.valueOf(x); // die int-Variable "x" in einen String umwandeln und der Variable "abc" zuweisen Umwandeln Kommazahl → Ganzzahl = nichts anderes als (auf- bzw. ab)runden (statische Method "round" aus der Klasse "Math"): float f = 1.6f; int i = Math.round(f); // In der Math - Klasse gibt´s eine Menge Methoden für mathematische Aufgaben Strukturen Es gibt in Java zahlreiche Klassen, die mehrere häufig verwendete Felder enthalten. Da es sich um Klassen handelt, müssen sie vor Verwendung erzeugt (instanziert) werden: Point (enthält "x" und "y"): Point pos = new Point(10,40); // erzeugen und initialisieren: x = 10 und y = 40) int x = pos.x; // Zugriff Dimension (enthält "Width" und "Height"): Dimension d = new Dimension(10,40); // erzeugen und initialisieren: Width = 10 und Height = 40) int w = d.Width; // Zugriff Rectangle (enthält x,y,Width und Height): Rectangle r = new Rectangle(10,8,200,400); int h = r.Height; // Zugriff Array Deklaration: int[] arZahlen; // dieses Array kann noch nicht verwendet werden. Momentan gibt´s nur eine leere Variable Instanzierung: arZahlen = new int[100]; // jetzt bietet das Array Platz für 100 int-Zahlen (die Zahlen selbst können alle Werte annehmen, die mit int möglich sind, d.h. zwischen -2Mrd bis + 2Mrd) Zugriff auf Arrays ist erst dann möglich, wenn sie erzeugt (instanziert) wurden! Deklaration + gleichzeitig Instanzierung: int[] arZahlen = new int[100]; Deklaration + Initialisierung mit "Wertereihe" In geschwungener Klammer die Werte angeben, die das Array enthalten soll. Man darf sie nachher zwar ändern, aber nicht mehr als zu Beginn einfügen: es wird genauso viel Platz reserviert wie Werte eingetragen wurden! int[] arZahlen = { 4, 23, 435, 8 }; // Platz für genau 4 Integer -2Zugriff auf Arrays Mit einem "Index" (= Zahl zwischen 0 und Größe des Arrays -1) arZahlen[7] = 3788; // Zugriff auf das 8.Element des Arrays (Zählung beginnt mit "0"!) Wie kann ich ermitteln, wieviel Platz für ein Array reserviert wurde? int anzahl = arZahlen.length; // Eigenschaft "length" des Arrays = Anzahl der mögl. Elemente Zweidimensionale Arrays Zwei eckige Klammern für die zwei Ebenen: int[][] schachbrett = new int[8][8]; // Array mit zwei Ebenen für je 8 Elemente Schleifen for for(int i = 0; i < 10; i++) { ; } // Schleifenzähler mit 0 initialisieren = "init" // Abbruchsbedingung (wie lange soll die Schleife laufen?) = "test" // Änderung des Schleifenzählers nach jedem Durchgang = "update" Die 3 Bereiche ("init", "test", "update") können auch leer bleiben; als Schleifenzähler kann auch eine bereits zuvor deklarierte Variable verwendet werden. Zwei "verschachtelte" for-Schleifen für mehrdimensionale Arrays Die Länge der beiden Ebenen des Arrays erfährt man durch die Eigenschaft "length". In eckiger Klammer hinter der ArrayVariablen muss die gewünschte Ebene angegeben werden (0 = 1.Ebene, 1 = 2.Ebene): int[][] schachbrett = new int[8][8]; for(int x = 0; x < schachbrett[0].length; x++) // äußere Schleife. Abbruchbedingung= Anzahl Elemente der 1.Ebene { for(int y = 0; y < schachbrett[1].length; y++ // innere Schleife. Abbruchbedingung= Anzahl Elemente der 2.Ebene { schachbrett[x][y] = 0; } } "Erweiterte" for-Schleife Statt einer normalen for-Schleife mit Schleifenzähler ist für Arrays (und Listen) auch eine verkürzte Version erlaubt: int[] arZahlen = new int[10]; for(int c: arZahlen) // bedeutet "nimm alle int´s des Arrays arZahlen und ermögliche den Zugriff auf jeden einzelnen int mithilfe der Variable c". Statt "c" ist jeder beliebige Name möglich, aber der Datentyp (int) muss mit dem Datentyp des Arrays übereinstimmen { c = 3966; // Zugriff auf die einzelnen Elemente des Arrays über die Variable "c" } while Die Abbruchsbedingung wird zu Beginn überprüft, d.h. möglicherweise läuft die Schleife kein einziges Mal durch! Der Schleifenzähler muss vorher deklariert werden! Innerhalb der Schleife den Schleifenzähler ändern, sonst gibt´s eine "Endlosschleife"! int i = 10; // Schleifenzähler außerhalb der Schleife deklarieren und initialisieren while(i < 20) // Abbruchbedingung in Klammern { ; i++; // Schleifenzähler nach jedem Durchgang ändern! } -3do ... while Im Unterschied zu "while" erfolgt die Prüfung der Abbruchbedingung erst am Ende, d.h. sie wird auf jeden Fall zumindest einmal durchlaufen! int i = 10; do { ; i++; } while (i < 10); Kontrollstrukturen if ... else In Klammern die Bedingung. Möglich sind: <, >, <=, >=, ==, !=. Beachte "==" für "gleich" und "!=" für "ungleich"! if(x > 10) { ; } else { ; } switch Müssen zahlreiche Bedingungen überprüft werden, bietet sich die "Switch" - Struktur an. Jeder Zweig muss mit "break" abgeschlossen werden. "default" steht für "alle übrigen möglichen Fälle" int a = 10; // eine Variable, deren Inhalt überprüft werden soll (kann auch ein String sein) switch(a) // "was steht in a"? { case 5: // falls 5, dann ... { ; break; } case 8: // falls 8, dann ... { ; break; } default: // in allen anderen Fällen ... { ; break; } } -4Methoden Deklaration: "Methodenkopf" mit Zugriffsmodifizierer, Rückgabewert, Name und Parameterliste private void zeichnen(Graphics g, int x, int y, int w, int h) { g.drawRectangle(x, y, w, h); } Der "Zugriffsmodifizierer" private bedeutet: nur in dieser Klasse sichtbar. "void" bedeutet: es gibt keinen Rückgabewert. Aufruf: zeichnen(evt.Graphics, 0, 0, 100, 200); Methode mit Rückgabewert Schlüsselwort „return“ schickt den Rückgabewert an den Aufrufer zurück. Jeder Datentyp ist als Rückgabewert erlaubt: private boolean prüfen(int a, int b) // Im Methodenkopf muss der Datentyp des Rückgabewerts stehen { if(a > b) return true; // "return" schickt den Rückgabewert ab (hier: "true") else return false; } Aufruf einer Methode mit Rückgabe und Auswertung des Rückgabewerts: boolean ergebnis = prüfen(wert1, wert2); // Methode aufrufen und Rückgabewert in einer Variable speichern if(ergebnis) // Rückgabewert auswerten { ... } Auch in einer einzigen Anweisung möglich: if(prüfen(wert1, wert2)) { ... } Statische Methoden Wie statische Felder werden auch statische Methoden mit dem Klassennamen aufgerufen. In Java gibt es zahlreiche derartige Klassen, z.B. „Math“ für mathematische Aufgaben: double int x1 double double y = 23.5; = Math.round(y); // y auf Ganzzahl runden x2 = Math.sqrt(y); // √𝑦 x3 = Math.Pow(y,3); // 𝑦 3 Selbsterstellte statische Methoden Vor dem Rückgabewert "static" einfügen. Statische Methoden sind normalerweise "public" (sie sollen ja außerhalb der Klasse aufgerufen werden können) public Class All { public static Point umwandeln(int xPixel, int yPixel, int zellgröße) { int spalte = xPixel / zellgröße; int zeile = yPixel / zellgröße; Point pRet = new Point(spalte, zeile); return pret; } } Aufruf: Point aktSpalteZeile = All.umwandeln(evt.getX(), evt.getY(), 36);