Department Informa?k
ETH Zrich
252-0027
Einfhrung in die Programmierung
Department Informa?k
ETH Zrich
Ergebnis Rckgabe
! Parameter erlauben Kommunika9on vom Aufrufer zur
aufgerufenen Methode
! Bisher waren die Methoden sehr einfach und druckten Text
! Methoden knnen aber mehr
! Ein Rckgabewert (return value) erlaubt der aufgerufenen
Methode dem Aufrufer einen Wert zu bermiIeln
3
4
Rckgabe eines Wertes
! Ein Rckgabewert muss deklariert werden
public static type name(parameters) {
statements;
...
return expression;
}
-42 abs(-42)
42
main
2.71
3
round(2.71)
Rckgabe eines Wertes
Beispiel:
// Returns the slope of the line between the given points.
public static double slope(int x1, int y1, int x2, int y2) {
double dy = y2 - y1;
double dx = x2 - x1;
return dy / dx;
}
if (max >= 2) {
System.out.print("2");
for (int i = 3; i <= max; i++) {
if (isPrime(i)) {
System.out.print(", " + i);
}
}
System.out.println();
}
}
Beispiellsung
// Returns true if arg is prime Beispiellsung
public static boolean isPrime (int arg){
// Determine number of factors for arg
boolean found = false;
int step = 2;
while (!found) {
if (arg % step == 0) {
found = true; // another factor found
}
else { step++ ; // keep on searching
}
}
// other factor == arg: prime found
return (step == arg);
}
Mgliche Fehler: Resultat nicht gespeichert
! Ein return Statement schickt einen Wert an den Aufrufer
! Namen, die in der aufgerufenen Methode verwendet werden,
sind belanglos (fr den Aufrufer)
Was ist hier nicht rich9g?
public static void main(String[] args) {
slope(0, 0, 6, 3);
System.out.println("The slope is " + result); // ERROR:
} // result not defined
public static double slope(int x1, int x2, int y1, int y2) {
double dy = y2 - y1;
double dx = x2 - x1;
double result = dy / dx;
return result;
}
Den Fehler vermeiden
! return schickt den Wert der Variable zurck zum Aufrufer.
! Der zurckgegebene Wert muss gespeichert werden oder in einem
Ausdruck verwendet werden.
! Der Compiler generiert keine Warnung oder Fehlermeldung
wenn dies vergessen wird.
Den Fehler vermeiden
public static void main(String[] args) {
double s = slope(0, 0, 6, 3);
System.out.println("The slope is " + s);
}
public static double slope(int x1, int x2, int y1, int
y2) {
double dy = y2 - y1;
double dx = x2 - x1;
double result = dy / dx;
return result;
}
return Anweisungen
! Eine Methode kann mehrere return Anweisungen
enthalten.
! Sinnvoll fr Fallunterscheidungen
! Eine Methode die einen Rckgabewert deklariert muss eine
(oder mehrere) return Anweisung(en) enthalten
21
if/else mit return
// Returns the larger of the two given integers.
public static int max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
quadrant 2 quadrant 1
x- x+
quadrant 3 quadrant 4
y-
32
String Literals
! String: Eine Folge von Buchstaben
! Nur eine Zeile, ggf. mit Ersatzdarstellungen
! Knnen auch einen Namen bekommen.
index 0 1 2 3 4 5 6 7
character B . D y l a n
38
String Methoden
Method name Description
indexOf(str) index where the start of the given string
appears in this string (-1 if not found)
length() number of characters in this string
substring(index1, index2) the characters in this string from index1
or (inclusive) to index2 (exclusive);
substring(index1) if index2 is omitted, grabs till end of string
toLowerCase() a new string with all lowercase letters
toUpperCase() a new string with all uppercase letters
! Beispiel
String writer = S. Beckett";
System.out.println(writer.length()); // 10
String weitere Beispiele
// index 0123456789012
String s1 = "Alice Munro";
String s2 = "Doris Lessing";
System.out.println(s1.length()); // 11
System.out.println(s1.indexOf("e")); // 4
System.out.println(s2.substring(6, 9)); // Les"
Output:
What is your name? Chamillionaire
CHAMILLIONAIRE has 14 letters and starts with C
Strings as user input
46
Die Java Math Klasse
Method name Description
Math.abs(value) absolute value
Math.ceil(value) rounds up
Math.floor(value) rounds down
Math.log10(value) logarithm, base 10
Math.max(value1, value2) larger of two values
Math.min(value1, value2) smaller of two values
Math.pow(base, exp) base to the exp power
Math.random() random double between 0 and 1
Math.round(value) nearest whole number
Math.sqrt(value) square root
Math.sin(value) sine/cosine/tangent of
Math.cos(value) an angle in radians Constant Description
Math.tan(value) Math.E 2.7182818...
Math.toDegrees(value) convert degrees to Math.PI 3.1415926...
Math.toRadians(value) radians and back
Aufruf von Math Methoden
Math.methodName(parameters)
! Beispiele:
double squareRoot = Math.sqrt(121.0);
System.out.println(squareRoot); // 11.0
System.out.println(Math.min(3, 7) + 2); // 5
Math Fragen
! Was ist das Ergebnis dieser Ausdrcke:
! Math.abs(-1.23)
! Math.pow(3, 2)
! Math.pow(10, -2)
! Math.sqrt(121.0) - Math.sqrt(256.0)
! Math.round(Math.PI) + Math.round(Math.E)
! Math.ceil(6.022) + Math.floor(15.9994)
! Math.abs(Math.min(-3, -5))
Besonderheiten von Math Methoden
! Nicht alle Math Methoden lieferen einen int Wert den wir
erwarten (knnten), manche z.B. liefern einen double Wert.
int x = Math.pow(10, 3); // ERROR: incompat. types
! Beispiel:
import java.util.*;
!Jede Menge von Werten kann auf die ganzen Zahlen abgebildet
werden
Random und andere Basistypen
!Jede Menge von Werten kann auf die ganzen Zahlen abgebildet
werden
! Code um zufllig Schere-Stein-Papier zu spielen:
int r = rand.nextInt(3);
if (r == 0) {
System.out.println("Schere");
} else if (r == 1) {
System.out.println("Stein");
} else { // r == 2
System.out.println("Papier");
}
Frage zu Random
!Schreiben Sie ein Programm um das Rollen zweier Wrfel (mit
je 6 Seiten) zu simulieren bis die Summe der Wrfel 7 ergibt.
2 + 4 = 6
3 + 5 = 8
5 + 6 = 11
1 + 1 = 2
4 + 3 = 7
Sie haben nach 5 Versuchen gewonnen!
Lsung
// Rolls two dice until a sum of 7 is reached.
import java.util.*;
int sum = 0;
while (sum != 7) {
// roll the dice once
int roll1 = rand.nextInt(6) + 1;
int roll2 = rand.nextInt(6) + 1;
sum = roll1 + roll2;
System.out.println(roll1 + " + " + roll2 + " = " + sum);
tries++;
}
do {
int roll1 = rand.nextInt(6) + 1; // one roll
int roll2 = rand.nextInt(6) + 1;
sum = roll1 + roll2;
System.out.println(roll1 + " + " + roll2 + " = " + sum);
tries++;
} while (sum != 7);
Department Informa?k
ETH Zrich
Reihen (Arrays)
Index 0 1 2 3 4 5 6 7 8 9
Wert 12 49 -2 26 5 17 -6 84 72 3
! Beispiel:
int[] numbers = new int[10];
Index 0 1 2 3 4 5 6 7 8 9
Wert 0 0 0 0 0 0 0 0 0 0
68
69
Array Deklara9on Syntax, Fortsetzung
! Die Lnge length kann ein beliebiger int Ausdruck sein.
int x = 2 * 3 + 1;
int[] data = new int[x % 5 + 2];
! Jedes Element wird auf einen Wert der Null "entspricht" gesetzt
! Voreinstellung ("default") Type Default Wert
int 0
double 0.0
boolean false
String null
Zugri auf Elemente
name[index] // Lesen
name[index] = value; // Modifikation
Beispiel:
numbers[0] = 27;
numbers[3] = -6;
System.out.println(numbers[0]);
Index
index 0 1 2 3 4 5 6 7 8 9
Wert 27
value 0 0 0 -6
0 0 0 0 0 0 0
Felder fr andere Typen
double[] results = new double[5];
results[2] = 3.4;
results[4] = -0.5;
Index 0 1 2 3 4
Wert 0.0 0.0 3.4 0.0 -0.5
Index 0 1 2 3 4 5 6 7 8 9
Wert 0 0 0 0 0 0 0 0 0 0
Out-of-bounds Zugrie
!Example:
int[] data = new int[10];
System.out.println(data[0]); // okay
System.out.println(data[9]); // okay
System.out.println(data[-1]); // exception
System.out.println(data[10]); // exception
Index 0 1 2 3 4 5 6 7 8 9
Wert 0 0 0 0 0 0 0 0 0 0
75
Arrays und Zugrie auf Elemente
int[] numbers = new int[8];
numbers[1] = 3;
numbers[4] = 99;
numbers[6] = 2;
int x = numbers[1];
numbers[x] = 42;
numbers[numbers[6]] = 11; // use numbers[6] as index
x 3
Index 0 1 2 3 4 5 6 7
numbers Wert 0 3 11 42 99 0 2 0
Arrays und for Schleifen
!Oy wird auf Arrayelemente in einer for Schleife zugegrien
for (int i = 0; i < 8; i++) {
System.out.print(numbers[i] + " ");
}
System.out.println(); // output: 0 3 11 42 99 0 2 0
// report results
System.out.println("Durchschnittskurs = + average);
for (int i = 0; i < days; i++) {
System.out.print("Moeglicher G/V Tag " + (i + 1) + " : ");
System.out.println( quotes[ quotes.length - 1] - quotes[i]);
}
}
}
Greek
!
!
!
83
84