PKJ 2005/1Stefan Dissmann
Zusammenfassung Vorwoche
•Weitere Konstrukte:• for-Schleife• if-else-Anweisung
•Weitere Typen:• boolean• byte, short, long, float, double• char
PKJ 2005/2Stefan Dissmann
Typumwandlung
Aus der letzten Vorlesung
Umwandlung von Zeichen• zu und aus int implizit:
int i = 'a'; i=97, Unicode-Position von achar c = 97+1; c='b', Zeichen 98 in Unicodechar 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
PKJ 2005/3Stefan Dissmann
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
PKJ 2005/4Stefan Dissmann
Zuweisungsoperatoren
Sind Kurzformen für häufige Formen der Zuweisung.Bieten nichts, was nicht auch anders geht!
statt kurzsumme = summe + zähler; summe += zähler;
produkt = produkt * zähler; produkt*=zähler;
Analog: -= /= %=
Vorsicht: Der Berechnungsoperator wird gerne übersehen!
PKJ 2005/5Stefan Dissmann
Zuweisungsoperatoren
Mit etwas komplexerer Semantik!
statt kurzzä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--
PKJ 2005/6Stefan Dissmann
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 1System.out.println(++j); druckt 2System.out.println(i + “ “ + j); druckt 2 2
Daher unbedingt vermeiden: i = --i - ++i + i++; Was ergibt diese Zeile für int i=5;?
PKJ 2005/7Stefan Dissmann
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!
PKJ 2005/8Stefan Dissmann
Methoden (Motivation)
Idee:Identische Programmabschnitte zusammenfassen und mit einem Namen versehen
Vorteile:• Übersichtlichkeit• Gleichheit aller Vorkommen• Änderungsfreundlichkeit• Programmverkürzung
PKJ 2005/9Stefan Dissmann
Methoden (Motivation)
BeispielAusgabe eines Rechnungsbetrags in folgender Form:
Gesamtbetrag Eurocent 2235 (enthält 16% MwSt.: Eurocent
304)
Fester Anteil (Text):Gesamtbetrag Eurocent 2235 (enthält 16% MwSt.: Eurocent
304)
Variabler Anteil (zwei ganzzahlige Werte):Gesamtbetrag Euro 2235 (enthält 16% MwSt.: Euro 304)
PKJ 2005/10Stefan Dissmann
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 BetragSystem.out.print(“ (enthält 16% MwSt.: Eurocent “);// Ausgabe Betrag der MwSt.System.out.println(“)“);
PKJ 2005/11Stefan Dissmann
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(“)“);
PKJ 2005/12Stefan Dissmann
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(“)“);
}
PKJ 2005/13Stefan Dissmann
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!
PKJ 2005/14Stefan Dissmann
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(“)“);
}
PKJ 2005/15Stefan Dissmann
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.
PKJ 2005/16Stefan Dissmann
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) {
…
}
}
PKJ 2005/17Stefan Dissmann
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);
}}
PKJ 2005/18Stefan Dissmann
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.
PKJ 2005/19Stefan Dissmann
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(“)“);
}
PKJ 2005/20Stefan Dissmann
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 “);
}
PKJ 2005/21Stefan Dissmann
Methoden (Wertrückgabe)
Methoden für Programm bisher ein Schwarzes LochParameter 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;
}
PKJ 2005/22Stefan Dissmann
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
PKJ 2005/23Stefan Dissmann
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-Anweisungwird die Ausführung der Methode abgebrochen.
• Mehrere return-Anweisungen sind daher möglich.
PKJ 2005/24Stefan Dissmann
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!
PKJ 2005/25Stefan Dissmann
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!
Top Related