Einführung in die Java- Programmierung

Größe: px
Ab Seite anzeigen:

Download "Einführung in die Java- Programmierung"

Transkript

1 Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger WiSe 2012/13 1

2 Rückblick Datentypen (int, long, double, boolean, String) Variablen und Variablendeklarationen Zuweisung Ausdrücke und Operationen Eingabe und Ausgabe Fallunterscheidungen (if... else ) Nachtrag: Vergleichsoperationen für Strings (Folie 23) Zuweisungs-Kurzformen (Folien 24, 25) 2

3 Nachtrag: Typkonvertierung Zuweisungen an kleinere Variablen sind ein Fehler: double d = 1.25; int x = d; // Fehler, double kann nicht // automatisch in int konvertiert // werden Man kann aber den Typ eines Ausdrucks absichtlich festlegen (und damit wissentlich Information verlieren): int y = (int)d; // OK, Nachkommastellen // werden abgeschnitten // y == 1 3

4 TypeCast Es geht NICHT: int x = (int) 1234 ; String x = (String) 5; aber: int x = Integer.parseInt( 1234 ); String x = + 5; 4

5 Themen Schleifen Methoden 5

6 Schleifen Schleifen dienen der Wiederholung von Anweisungen. Ob wiederholt wird, wird durch eine Bedingung bestimmt Die einfachste Art der Schleife ist die while- Schleife while (<Bedingung>) { } // Schleifenrumpf: Anweisungen 6

7 while-schleife 7

8 Demo: WhileSchleifeGGT.java Aufgabe: Lasst uns ein Programm schreiben, welches 2 ganze Zahlen vom Benutzer einließt und deren ggt bestimmt Lösungsansatz: Wiederholt die kleinere von der größeren Zahl abziehen Wird eine der Zahlen 0, so ist die andere der ggt Klappt nur für nicht-negative Zahlen (aber für den ggt können wir sowieso Absolutwerte nehmen) 8

9 Demo: Zinsen.java Aufgabe: Lasst und ein Programm schreiben, welches die den Kontostand bei fester Verzinsung nach beliebig vielen Jahren berechnet Der Anfangsbetrag, der Zinssatz und die Laufzeit werden vom Benutzer eingelesen Nach jedem Jahr (Schleife) muss der Kontostand neu berechnet werden (auf Basis des alten Standes und dem Zinswert) Nach Berechnung der Gesamtlaufzeit muss der Endkontostand ausgegeben werden 9

10 do-while-schleife Neben der normalen while-schleife, gibt es noch die do-while-schleife Der Rumpf wird hier zuerst ausgeführt, und erst dann wird die Bedingung überprüft do { // Schleifenrumpf: Anweisungen } while (<Bedingung>); 10

11 do-while-schleife 11

12 Demo: SummeDurchschnitt.java Aufgabe: Schreibe ein Programm, welches beliebig viele Zahlen vom Benutzer einliest und dann die Summe und den Durchschnitt ausgibt Der Benutzer signalisiert durch die Eingabe von 0, dass alle Zahlen eingelesen sind 12

13 Demo: ZahlRaten.java Aufgabe: Lasst uns ein Programm schreiben, welches zufällig eine Zahl zwischen 0 und 99 auswählt Der Benutzer soll diese Zahl erraten Das Programm gibt nach jedem Versuch entweder einen Tipp (größer, kleiner), oder es bestätigt den richtigen Tipp und gibt die Anzahl der benötigten Versuche aus Bemerkung: Die Methode Math.random() liefert einen zufälligen double-wert zwischen 0.0 (inkl.) und 1.0 (exkl.) 13

14 Zählschleifen Häufg benötigt man Schleifen, die von 1..n zählen (oder n..m) Dazu gibt es die for-schleife for (int i = 0; i < 10; i++) { // Rumpf } int i = 0; while (i < 10) { // Rumpf i++; } 14

15 Demo: Quadratzahlen.java Aufgabe: Schreibe ein Programm, welches die Quadratzahlen von 1 bis n (wird vom Benutzer eingegeben) ausgibt, und benutze dabei eine for-schleife 15

16 Demo: QuadratzahlenWhile.java Aufgabe: Schreibe ein Programm, welches die Quadratzahlen von 1 bis n (wird vom Benutzer eingegeben) ausgibt, und benutze dabei eine while-schleife 16

17 Demo: Fakultaet.java Aufgabe: Schreibe ein Programm, welches die Fakultät von einer natürlichen Zahl n (wird vom Benutzer eingegeben) ausgibt 17

18 Aus Schleifen ausbrechen Es gibt 2 mögliche Anweisungen, um vorzeitig aus einer Schleife auszubrechen continue beendet nur den aktuellen Durchlauf break beendet die gesamte Schleife 18

19 Demo: BreakAndContinue.java Aufgabe: Schreibe ein Programm, welches alle ganzen Zahlen von 1 an ausgibt, es sein denn die Zahl ist durch 2 oder 3 teilbar, dann soll diese Zahl übersprungen werden die Zahl ist 123, dann soll die gesamte Schleife beendet werden 19

20 Geschachtelte Schleifen Alle Arten von Schleifen können auch geschachtelt werden while (<b1>) { for (int a = 100; a > 0; a--) { do { // mach was } while (<b2>); } } 20

21 Demo: EinMalEins.java Aufgabe: Schreibe ein Programm, welches das kleine Ein-mal-Eins in tabellarischer Form ausgibt Die erste Spalte/Zeile sind jeweils die Zahlen 1 bis 10 Die Zellen der Tabelle sind jeweils die Produkte aus Spalte/Zeile Tipp: Der String "\t" druckt einen Tabulator (Einrückung zu einem festen Punkt) 21

22 Demo: XhochK.java Aufgabe: Schreibe ein Programm, welches eine reelle Zahl x und eine ganze Zahl k einliest und dann x hoch k berechnet (Numerikaufgabe 3a) k kann auch negativ sein! Math.pow() darf nur zum Testen der Lösung verwendet werden! 22

23 Methoden Bislang haben wir unsere Programme einfach in die main()-methode gepackt Zur Strukturierung von etwas komplexeren Programmen bietet es sich an, eigene Methoden zu defnieren Diese können dann immer wieder aufgerufen werden, statt jedes mal den Code einzufügen 23

24 Methoden Wir haben schon viele Methoden benutzt, z.b.: Math.sqrt() // Wurzel Math.pow() // Potenz System.out.println() // Textausgabe JConsole.readInt() // int-wert lesen Um eine Methode zu benutzen, muss man deren Signatur kennen: Typ des Ergebnisses (void, falls kein Ergebnis) Name der Methode Typen und Anzahl der Parameter double Math.sqrt(double x) 24

25 Methoden als BlackBox Es ist dokumentiert, was eine Methode macht, aber (i.d.r.) nicht wie sie es macht Promtps the user for a int value. Prints the given string to standard out. String JConsole.readInt int String System.out.println Returns the correctly rounded positive square root of a double value. Kein Ergebnis Returns the value of the first argument raised to the power of the second argument. double Math.sqrt double double Math.pow double double 25

26 Methodenaufrufe Methoden werden über Methodenaufrufe benutzt Die Anzahl und Typen der aktuellen Parameter müssen zu den der formalen Parameter passen double exp = Math.pow(17, -0.4); // Ok! double exp = Math.pow(17); // Falsch! double exp = Math.pow("17", 2); // Falsch! 26

27 Methoden-Defnitionen public class Math { Aufrufbar aus anderen Klassen } public static double pow(double x, double k) { // Verarbeitung } double double Einfach so mit Math.pow(x, y) aufrufbar formale Parameter Math.pow double 27

28 Ergebnis liefern Methoden, die ein Ergebnis berechnen, müssen dieses mit der return-anweisung zurückgeben public static int foo(int x) { // berechne int ergebnis return ergebnis; } //Irgendwo anders in derselben Klasse int x = foo(17); 28

29 Demo: Rechner.java Aufgabe: Erstelle eine Klasse Rechner, die eine Methode add() zum Addieren zweier ganzer Zahlen hat Spaßeshalber: Man darf den +-Operator nicht verwenden, nur ++ bzw

30 Demo: Rechner.java Aufgabe: Erweitert den Rechner um die Methode sub() und mul() Spaßeshalber: Bei sub() ist der Operator verboten, bei mul() ist der Operator * verboten Nutzt stattdessen unsere add()-methode! 30

31 Demo: Rechner.java Aufgabe: Erweitert den Rechner um die Methoden div() und modulo() div(): Ganzzahldivision modulo(): Rest der Ganzzahldivision Spaßeshalber: Bei div() ist der Operator / verboten, bei modulo() ist der Operator % verboten 31

32 Demo: Wurzel.java Aufgabe: Schreibe eine Methode, die genau wie Math.sqrt() die Quadratwurzel einer positiven, reellen Zahl zieht Math.sqrt() darf natürlich nicht benutzt werden! 32

33 Demo: Wurzel.java Idee: Annäherungslösung durch Intervallschachtelung 33