PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife...

25
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: • for-Schleife • if-else-Anweisung Weitere Typen: • boolean • byte, short, long, float, double • char

Transcript of PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife...

Page 1: PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Weitere Konstrukte: for-Schleife if-else-Anweisung Weitere Typen: boolean byte, short, long, float,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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!