Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float, double char
Typumwandlung Aus der letzten Vorlesung Umwandlung von Zeichen zu und aus int implizit: int i = 'a'; i=97, Unicode-Position von a char c = 97+1; c='b', Zeichen 98 in Unicode char c = 'a'+2; c='c', Zeichen 99 in Unicode Geht, weil passende Größe des zugewiesen Wertes garantiert ist: Alle zugewiesenen Werte sind Konstanten => Compiler berechnet Wert und bestimmt das zuzuweisende Zeichen
Typumwandlung Aus der letzten Vorlesung Umwandlung von Zeichen Aber: int i = 97; i=97 (Unicode-Position von a) char c = i+1; i ist Variable => der Compiler kann nicht im Voraus rechnen, sondern vermutet Unheil Lösung: char c = (char)(i+1); Type Cast
Zuweisungsoperatoren Sind Kurzformen für häufige Formen der Zuweisung. Bieten nichts, was nicht auch anders geht! statt kurz summe = summe + zähler; summe += zähler; produkt = produkt * zähler; produkt*=zähler; Analog: -= /= %= Vorsicht: Der Berechnungsoperator wird gerne übersehen!
Zuweisungsoperatoren Mit etwas komplexerer Semantik! statt kurz zähler = zähler + 1; zähler++; oder ++zähler; aber: zähler++ und ++zähler ändern zähler in gleicher Weise, liefern aber als Operator unterschiedliche Ergebnisse Analog: --zähler und zähler--
Zuweisungsoperatoren i++ erhöht i um 1 und liefert den Wert von i vor der Erhöhung ++i erhöht i um 1 und liefert den Wert von i nach der Erhöhung Beispiel: int i=1, j=1; System.out.println(i++); druckt 1 System.out.println(++j); druckt 2 System.out.println(i + “ “ + j); druckt 2 2 Daher unbedingt vermeiden: i = --i - ++i + i++; Was ergibt diese Zeile für int i=5;?
Sichtbarkeit von Variablen Variablen sind immer sichtbar nach ihrer Vereinbarung, in dem Block, in dem sie vereinbart wurden, in allen darin geschachtelten Blöcken, in der for-Schleife, in deren Kopf sie vereinbart wurden. Variablen können in ihrem Sichtbarkeitsbereich nicht erneut vereinbart werden!
Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit Gleichheit aller Vorkommen Änderungsfreundlichkeit Programmverkürzung
Methoden (Motivation) Beispiel Ausgabe eines Rechnungsbetrags in folgender Form: Gesamtbetrag Eurocent 2235 (enthält 16% MwSt.: Eurocent 304) Fester Anteil (Text): Variabler Anteil (zwei ganzzahlige Werte): Gesamtbetrag Euro 2235 (enthält 16% MwSt.: Euro 304)
Methoden (Motivation) Gesamtbetrag Eurocent 2235 (enthält 16% MwSt.: Eurocent 304) Programmcode für festen Anteil: System.out.println(“Gesamtbetrag“); System.out.print(“Eurocent “); // Ausgabe Betrag System.out.print(“ (enthält 16% MwSt.: Eurocent “); // Ausgabe Betrag der MwSt. System.out.println(“)“);
Methoden (Motivation) Gesamtbetrag Eurocent 2235 (enthält 16% MwSt.: Eurocent 304) Programmcode für variablen Anteil: int betrag = ???? System.out.println(“Gesamtbetrag“); System.out.print(“Eurocent “); System.out.print(betrag); System.out.print(“ (enthält 16% MwSt.: Eurocent “); System.out.print(betrag/116*16); System.out.println(“)“);
Methoden (Beispiel) Und nun als Methode: public static void rechnung(int betrag) { System.out.println(“Gesamtbetrag“); System.out.print(“Eurocent “); System.out.print(betrag); System.out.print( “ (enthält 16% MwSt.: Eurocent “); System.out.print(betrag/116*16); System.out.println(“)“); }
Methoden (Beispiel) Bisher bekannt von main: public static void rechnung(int betrag) { System.out.println(“Gesamtbetrag“); System.out.print(“Eurocent “); System.out.print(betrag); System.out.print( “ (enthält 16% MwSt.: Eurocent “); System.out.print(betrag/116*16); System.out.println(“)“); } Also: main ist auch eine Methode!
Methoden (Beispiel) Neu ist der selbst gewählte Parameter: public static void rechnung(int betrag) { System.out.println(“Gesamtbetrag“); System.out.print(“Eurocent “); System.out.print(betrag); System.out.print( “ (enthält 16% MwSt.: Eurocent “); System.out.print(betrag/116*16); System.out.println(“)“); }
Methoden (Beispiel) public static void rechnung(int betrag) { … } Zusammenfassung: Die Vereinbarung einer Methode besteht aus - einem Kopf mit - Schlüsselwörtern, - einem Namen und - einer Parameterliste und aus einem Rumpf mit Programmtext in einem Block, in dem die Parameter verwendet werden können.
Methoden (Vereinbarung) Methoden werden direkt in Klassen vereinbart! Also zum Beispiel: public class testRechnung { public static void rechnung(int betrag) { … } public static void main(String[] args) {
Methoden (Aufruf) Methoden werden in Methoden aufgerufen! Also zum Beispiel druckt folgendes Programm 6 Zeilen: public class testRechnung { public static void rechnung(int betrag) { … } public static void main(String[] args) { rechnung(7580); rechnung(5699); rechnung(10250); } }
Methoden (Aufruf) Beim Aufruf einer Methode wird dem Parameter mit ein Wert übergeben! rechnung(7580); ist im Prinzip vergleichbar mit: betrag = 7580; System.out.print(betrag); … System.out.print(betrag/116*16); Parameter sind Variable, die nur in der Methode sichtbar sind, aber über den Aufruf gesetzt werden können.
Methoden (weitere Beispiele) 2 Parameter (Parameterliste) public static void rechMitNr(int betrag,int nr) { System.out.println(“Gesamtbetrag für “ + nr); System.out.print(“Eurocent “); System.out.print(betrag); System.out.print( “ (enthält 16% MwSt.: Eurocent “); System.out.print(betrag/116*16); System.out.println(“)“); }
Methoden (weitere Beispiele) ohne Parameter (leere Parameterliste) public static void rechnungKonto() { System.out.print(“Bitte überweisen Sie den “); System.out.print(“ Betrag auf das Konto: “); System.out.println(“ 7552030 “); }
Methoden (Wertrückgabe) Methoden für Programm bisher ein Schwarzes Loch Parameter verschwinden, aber nichts kommt zurück Jetzt: Methode liefert genau einen Wert zurück in das Programm! Beispiel: Berechnung der MwSt. aus Endbetrag public static int mwstVonBetrag(int betrag) { return betrag/116*16; }
Methoden (Wertrückgabe) public static int mwstVonBetrag(int betrag) { return betrag/116*16; } Typangabe vor dem Namen bestimmt den Typ des zurückgegebenen Wertes Es ist nur eine Typangabe erlaubt! Sprechweisen: Rückgabetyp, Rückgabewert
Methoden (Wertrückgabe) public static int mwstVonBetrag(int betrag) { return betrag/116*16; } Das Schlüsselwort return bestimmt den zurückgegebenen Wert. Der zurückgegebene Wert muss zum Typangabe passen! Nach der Ausführung der return-Anweisung wird die Ausführung der Methode abgebrochen. Mehrere return-Anweisungen sind daher möglich.
Methoden (weitere Beispiele) public static int prozVonBetrag(int betrag, int p) { return betrag/(100+p)*p; } Und neu vereinbart: public static int mwstVonBetrag(int betrag) { return prozVonBetrag(betrag,16); } Ganz wichtig: Jede der beiden Methoden hat ihre eigene Variable mit dem Namen betrag!
Methoden (weitere Beispiele) Und als Abschluss: public static void rechnung(int betrag) { System.out.println(“Gesamtbetrag“); System.out.print(“Eurocent “); System.out.print(betrag); System.out.print( “ (enthält 16% MwSt.: Eurocent “); System.out.print(mwstVonBetrag(betrag)); System.out.println(“)“); } Übrigens: print und println sind auch Methoden!