Übungsstunde 4
Einführung in die Programmierung I
Probleme bei Übung 3
[TODO Assistent]
Nachbesprechung Übung 4
static boolean isTriangle(int a, int b, int c) { if (a > b + c || b > a + c || c > a + b)
return false;
return true;
}
static void printPrimes(int n) { if (isPrime(n)) {
System.out.println("Primzahl");
} else {
System.out.println("Keine Primzahl");
} }
static boolean isPrime(int p) {
boolean[] sieb = new boolean[p + 1];
for(int i = 2; i < sieb.length; i++) sieb[i] = true;
for(int i = 2; i < p; i++) { if(sieb[i]) {
for (int v = 2 * i; v <= p; v += i) { sieb[v] = false;
} } }
return sieb[p];
}
Sieb.java von Ü3
static double squareRoot(int z) { double c = z;
double t = c / 2.0;
double eps = 0.000000000001;
while (Math.abs(t * t - c) > eps) { t = (c / t + t) / 2.0;
}
return t;
}
static boolean hasSortedEnd(int[] vector) { int len = vector.length;
boolean fall2 = len < 3
|| !(vector[len-3] <= vector[len-2] && vector[len-2] <= vector[len-1]
|| vector[len-3] >= vector[len-2] && vector[len-2] >= vector[len-1]);
return !fall2;
Bedingte ("short-circuit") Auswertung von ||
Vorbesprechung Übung 5
Aufgabe 1: Testen mit JUnit
Zweck des Programms:
● Wochentag eines Datums (nach 01.01.1900) ausgeben Beispiel: 21.10.2016 → Friday
Gibt fälschlicherweise aber “The 21.10.2016 is a Monday” aus.
● Berücksichtigt Schaltjahre (“Leap year”) Funktionsweise:
1. Überprüft, ob Datum OK ist
2. Zählt die Tage ab 1.1.1900 bis zum eingegebenen Datum 3. Wochentag = Tage % 7
Aufgabe 1: Testen mit JUnit
Tests in PerpetualCalendarTest.java
● Einzelne Tests prüfen Rückgabewerte von einzelnen Methoden des Programms PerpetualCalendar.java
● Tests sollten interessante Parameter für die Methoden testen
● Beispiel testCountDaysInYear():
assertEquals(366, PerpetualCalendar.countDaysInYear(1904));
1904 ist ein Schaltjahr, also sollte countDaysInYear() 366 Tage zurückgeben
DEMO
Distanz
Schreiben Sie eine Methode, die als Parameter die x und y kartesischen
Koordinaten eines Punktes (x | y) nimmt und die Entfernung des Punktes vom Ursprung liefert.
Überlegen Sie sich einige Testfälle: Wieviele wollen Sie und was für Eigenschaften sollten sie testen?
Aufgabe 2: Wett-Simulation
Simulation
● Start-Kapital: X
● Einsatz: 1
● p=50% den Einsatz zu verdoppeln
● Wett-Reihe beendet, wenn bankrott oder Ziel-Kapital Y erreicht
Wett-Reihe
Bankrott Ziel-Kapital Y erreicht
Aufgabe 3: Wörter Raten
Aus Textdatei lesen
Scanner scanner = new Scanner(new File("woerter.txt"));
String[] woerter = new String[scanner.nextInt()];
for(int i = 0; i < woerter.length; i++) { woerter[i] = scanner.next();
} 8
wort
blasinstrument computer
schlange java
programmieren welt
sugus
woerter.txt Code zum Einlesen der Wörter:
Absoluter Pfad
● beginnt mit C:\… unter Windows oder /… unter Linux/macOS
Relativer Pfad
● ist relativ zum aktuellen Verzeichnis (“working directory”) des Programms (bei uns der Projektordner)
Liest das nächste Wort
Anzahl Wörter = 8
String-Vergleiche
String [] buchstaben = {"n", "o"};
String [] array = {"no"};
// wort = "no"
String wort = buchstaben[0] + buchstaben[1];
System.out.println((s == s4));
System.out.println((wort == array[0]));
System.out.println((wort.equals(array)));
System.out.println(wort.equals(array[0]));
System.out.println((wort.equals("no")));
①
②
③
④
⑤
Aufgabe 4: Datenanalyse
Anzahl Daten: 26 Minimum: 137 cm Maximum: 202 cm
Durchschnitt: 173 cm
Beispiel:
Histogramm
26 168 190 174 170 183 145 202
…
groessen.txt Wie viele Klassen soll das
Histogramm enthalten? 10 [100,115)
[115,130) | [130,145) ||
[145,160) |||||||
[160,175) ||||||||||||||||
[175,190) ||||||||||||||
[190,205) ||||||
[205,220) [220,235) [235,250)
Zusatzübungen
Postfix-Increment Operator
Was sind die Werte der Variablen (alles int)?
x = 0;
y = 0;
z = 1;
y = x++ + z - x;
x = 0;
y = 0;
z = 1;
y = x++ + z * x;
x = 0;
y = 0;
z = 1;
y = z * x + x++;
Arrays
Was gibt das folgende Code-Segment aus?
int [] a = new int [10];
for (int i = 0; i < 10; i++) { a[i] = 9 - i;
}
for (int i = 0; i < 10; i++) { a[i] = a[ a[i] ] ;
}
for (int i = 0; i < 10; i++) { System.out.print(a[i]);
}
Wie könnte man dieses Code-Segment flexibler formulieren?