pkj 2005/1 stefan dissmann zusammenfassung vorwoche weitere konstrukte: for-schleife...
TRANSCRIPT
![Page 1: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/1.jpg)
PKJ 2005/1Stefan Dissmann
Zusammenfassung Vorwoche
•Weitere Konstrukte:• for-Schleife• if-else-Anweisung
•Weitere Typen:• boolean• byte, short, long, float, double• char
![Page 2: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/2.jpg)
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
![Page 3: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/3.jpg)
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
![Page 4: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/4.jpg)
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!
![Page 5: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/5.jpg)
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--
![Page 6: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/6.jpg)
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;?
![Page 7: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/7.jpg)
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!
![Page 8: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/8.jpg)
PKJ 2005/8Stefan Dissmann
Methoden (Motivation)
Idee:Identische Programmabschnitte zusammenfassen und mit einem Namen versehen
Vorteile:• Übersichtlichkeit• Gleichheit aller Vorkommen• Änderungsfreundlichkeit• Programmverkürzung
![Page 9: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/9.jpg)
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)
![Page 10: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/10.jpg)
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(“)“);
![Page 11: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/11.jpg)
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(“)“);
![Page 12: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/12.jpg)
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(“)“);
}
![Page 13: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/13.jpg)
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!
![Page 14: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/14.jpg)
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(“)“);
}
![Page 15: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/15.jpg)
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.
![Page 16: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/16.jpg)
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) {
…
}
}
![Page 17: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/17.jpg)
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);
}}
![Page 18: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/18.jpg)
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.
![Page 19: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/19.jpg)
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(“)“);
}
![Page 20: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/20.jpg)
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 “);
}
![Page 21: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/21.jpg)
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;
}
![Page 22: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/22.jpg)
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
![Page 23: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/23.jpg)
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.
![Page 24: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/24.jpg)
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!
![Page 25: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,](https://reader033.vdokument.com/reader033/viewer/2022051614/55204d6649795902118bbc76/html5/thumbnails/25.jpg)
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!