Einführung in die Java- Programmierung

Werbung
Einführung in die JavaProgrammierung
Dr. Volker Riediger
Tassilo Horn
riediger|[email protected]
WiSe 2012/13
1
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
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
TypeCast
●
Es geht NICHT:
●
int x = (int) “1234“;
●
String x = (String) 5;
●
●
aber:
●
int x = Integer.parseInt(“1234“);
●
String x = ““ + 5;
4
Themen
●
Schleifen
●
Methoden
5
Schleifen
●
●
Schleifen dienen der Wiederholung von
Anweisungen. Ob wiederholt wird, wird durch eine
Bedingung bestimmt
Die einfachste Art der Schleife ist die whileSchleife
while (<Bedingung>) {
// Schleifenrumpf: Anweisungen
}
6
while-Schleife
7
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
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
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
do-while-Schleife
11
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
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
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
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
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
Demo: Fakultaet.java
●
Aufgabe: Schreibe ein Programm,
welches die Fakultät von einer natürlichen
Zahl n (wird vom Benutzer eingegeben)
ausgibt
17
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
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
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
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
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
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
Methoden
●
●
Wir haben schon viele Methoden benutzt, z.B.:
●
Math.sqrt() // Wurzel
●
Math.pow()
●
System.out.println() // Textausgabe
●
JConsole.readInt()
// Potenz
// 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
Methoden als BlackBox
●
Es ist dokumentiert, was eine Methode
macht, aber (i.d.R.) nicht wie sie es macht
Prints the given string to standard out.
Promtps the user for a int value.
String
String
JConsole.readInt
System.out.println
int
Kein Ergebnis
Returns the correctly rounded positive
square root of a double value.
double
Math.sqrt
double
Returns the value of the first argument raised
to the power of the second argument.
double
double
Math.pow
double
25
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
Methoden-Defnitionen
public class Math {
Einfach so mit Math.pow(x, y) aufrufbar
„formale“ Parameter
Aufrufbar aus anderen Klassen
…
public static double pow(double x, double k) {
// Verarbeitung
}
…
}
double
double
Math.pow
double
27
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
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. --
29
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
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
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
Demo: Wurzel.java
●
Idee: Annäherungslösung durch
Intervallschachtelung
33
Herunterladen