Wissen und Reproduzieren
16 PunkteLea hat das Programm Rakete geschrieben und bringt es zum Laufen.
Lösung anzeigen (nach Auswerten freigeschaltet)
Erwartungshorizont: Rakete.java → Quelltext; javac Rakete.java → Compiler übersetzt die ganze Datei vorab; Rakete.class → Bytecode; java Rakete → startet die JVM, die den Bytecode auf jedem Betriebssystem ausführt. Je richtige Zuordnung 1 P.
Lösung anzeigen (nach Auswerten freigeschaltet)
Erwartungshorizont: 7 / 2 = 3 (int / int schneidet ab) · 17 % 5 = 2 (Rest) · (int) 9.99 = 9 (Cast schneidet ab, rundet nicht) · 10 / 4.0 = 2.5 (ein double-Operand genügt). Je 1 P.
- - volumen: Ganzzahl
- - gewicht: Fließkommazahl
- c Rucksack(volumen: Ganzzahl)
- + getGewicht(): Fließkommazahl
- + einpacken(kg: Fließkommazahl)
- + istVoll(): Wahrheitswert
+ einpacken(kg: Fließkommazahl)? 2 PLösung anzeigen (nach Auswerten freigeschaltet)
Erwartungshorizont: a) Minus → privates Attribut; c → Konstruktor; Rückgabetyp nach dem Doppelpunkt → Methode mit Rückgabe; ohne Rückgabetyp → void-Methode (je 0,5 P). b) Plus → public, kein Rückgabetyp → void, Fließkommazahl → double, Typ vor den Namen: public void einpacken(double kg) (2 P).
int[] tore = {2, 0, 3, 1, 4};
int summe = 0;
for (int i = 1; i < tore.length; i++) {
summe = summe + tore[i];
}
tore.length, tore[3] und dem größten gültigen Index. 3 Psumme nach der Schleife? 1 PLösung anzeigen (nach Auswerten freigeschaltet)
Erwartungshorizont: a) 5 Werte → length = 5; Index 3 ist der vierte Wert → 1; Indizes 0 bis 4 → größter Index 4 (je 1 P). b) Die Schleife beginnt bei i = 1, der erste Wert (2) fehlt: 0 + 3 + 1 + 4 = 8 (1 P).
Zusammenhänge herstellen
22 Punkteint s = 0;
for (int i = 3; i <= 15; i += 4) {
if (i > 8) {
s = s + i;
} else {
s = s - 1;
}
}
i und s: 6 PLösung anzeigen (nach Auswerten freigeschaltet)
Erwartungshorizont: i = 3: s = −1 · i = 7: s = −2 · i = 11: s = 9 · i = 15: s = 24 · i = 19: Bedingung falsch. a) 4 Durchläufe (2 P) b) 15, denn <= schließt die 15 ein (2 P) c) s = 24 (2 P).
public static int rabatt(int preis, int prozent) {
return preis - preis * prozent / 100;
}
public static void main(String[] args) {
int a = rabatt(80, 25);
int b = rabatt(a, 10);
System.out.println("Summe: " + a + b);
}
a und b. 3 PLösung anzeigen (nach Auswerten freigeschaltet)
Erwartungshorizont: a) 80 · 25 / 100 = 20, also a = 80 − 20 = 60 (2 P); 60 · 10 / 100 = 6, also b = 54 (1 P). b) Von links: "Summe: " + 60 ist schon Text, daran wird 54 angehängt → Summe: 6054 (2 P). Richtig wäre "Summe: " + (a + b).
public class Spardose {
private String besitzer;
private int betrag;
private boolean offen;
public Spardose(String besitzer) {
this.besitzer = besitzer;
}
public Spardose(String besitzer, int betrag) {
this.besitzer = besitzer;
this.betrag = betrag;
}
public void einwerfen(int euro) {
if (euro > 0) {
betrag = betrag + euro;
}
}
public int getBetrag() {
return betrag;
}
}
// in main:
Spardose x = new Spardose("Mia");
Spardose y = new Spardose("Tom", 20);
x.einwerfen(5);
y.einwerfen(-10);
x.einwerfen(12);
main. 5 Poffen von Mias Spardose? 1 PLösung anzeigen (nach Auswerten freigeschaltet)
Erwartungshorizont: a) Mias Spardose startet mit dem Standardwert 0, dann + 5 + 12 = 17 € (2 P). b) Tom startet mit 20 €; −10 wird vom if abgewiesen → 20 € (2 P). c) Zwei new → 2 Objekte (1 P). d) Kein Konstruktor setzt offen → Standardwert false (1 P).
public class Konto {
private int stand;
public Konto(int stand) {
this.stand = stand;
}
public int getStand() {
return stand;
}
public void abheben(int betrag) {
if (betrag <= stand) {
stand = stand - betrag;
}
}
public String info() {
return "Stand: " + stand;
}
}
public class Jugendkonto extends Konto {
private int limit;
public Jugendkonto(int stand, int limit) {
/* Zeile X */
this.limit = limit;
}
@Override
public void abheben(int betrag) {
if (betrag <= limit) {
super.abheben(betrag);
}
}
}
// in main:
Jugendkonto j = new Jugendkonto(100, 30);
j.abheben(50);
j.abheben(20);
j.abheben(90);
j.getStand() nach den drei Abhebungen? 2 Pmain übersetzt. (mehrere Antworten richtig) 2 PLösung anzeigen (nach Auswerten freigeschaltet)
Erwartungshorizont: a) Der geerbte Teil wird vom Konstruktor der Oberklasse gesetzt: super(stand); als erste Anweisung; stand ist in Konto privat (1 P). b) 50 > 30 → abgewiesen; 20 → 80; 90 > 30 → abgewiesen. Es läuft die überschriebene Methode des Jugendkontos: 80 € (2 P). c) getStand(), info() und abheben(…) sind geerbt bzw. überschrieben und öffentlich. j.limit → limit has private access in Jugendkonto, getLimit() → cannot find symbol (anteilig 2 P, Fehlklicks werden abgezogen).
Verallgemeinern und beurteilen
12 PunkteEin Kochbuch verwaltet seine Rezepte in einer Liste. Es enthält 12 Rezepte, „Pfannkuchen“ steht an Index 8. Ein Vergleich ist ein Aufruf von equals.
public class Kochbuch {
private ArrayList<Rezept> rezepte;
public Kochbuch() {
rezepte = new ArrayList<>();
}
public void hinzufuegen(Rezept r) {
rezepte.add(r);
}
public Rezept suche(String titel) {
for (Rezept r : rezepte) {
if (r.getTitel().equals(titel)) {
return r;
}
}
return null;
}
}
suche("Pfannkuchen")? 2 Psuche("Lasagne"), wenn es keine Lasagne gibt? 1 PLösung anzeigen (nach Auswerten freigeschaltet)
Erwartungshorizont: a) Index 8 ist der 9. Eintrag → 9 Vergleiche (2 P). b) Nicht vorhanden → alle 12 vergleichen (1 P). c) (1 + 2 + … + 12) / 12 = (12 + 1) / 2 = 6,5 (1 P). d) Richtig: 1, 3, 5. return r; beendet die Schleife beim Treffer, deshalb nicht immer 12 Vergleiche; == vergleicht bei Strings nur Verweise; ohne return null; gäbe es einen Weg ohne Rückgabe (anteilig 2 P, Fehlklicks werden abgezogen).
Jonas programmiert den Kiosk für das Schulfest. javac bricht mit Fehlermeldungen ab.
public class Kiosk {
private int vorrat;
private double preis;
public Kiosk(int vorrat) {
this.vorrat = vorrat;
preis = 1.5;
}
public int getVorrat() {
return vorrat;
}
public int verkaufen(int n) {
if (n <= vorrat) {
vorrat = vorrat - n;
return n * preis;
}
}
}
public class Schulfest {
public static void main(String[] args) {
Kiosk k = new Kiosk();
k.vorrat = 5;
int rest = k.getVorrat();
}
}
verkaufen in double, ergänzt am Ende return 0;, schreibt new Kiosk(20) und löscht k.vorrat = 5;. Welchen Wert liefert danach k.verkaufen(4)? 2 PLösung anzeigen (nach Auswerten freigeschaltet)
Erwartungshorizont: a) Vier Stellen (anteilig 4 P, Fehlklicks werden abgezogen): new Kiosk() → constructor Kiosk in class Kiosk cannot be applied to given types, weil es nur den Konstruktor mit int gibt; k.vorrat → vorrat has private access in Kiosk; n * preis ist double → possible lossy conversion from double to int; ist das behoben, meldet javac noch missing return statement. preis = 1.5; ist korrekt, weil kein gleichnamiger Parameter existiert. b) 4 · 1.5 = 6.0 → 6 € (2 P).
Ergebnis
| Aufgabe | Thema | Punkte |
|---|
Notenschema
| Punkte | Note | Beurteilung |
|---|---|---|
| 46 – 50 P | 1 | sehr gut |
| 40 – 45 P | 2 | gut |
| 30 – 39 P | 3 | befriedigend |
| 22 – 29 P | 4 | ausreichend |
| 12 – 21 P | 5 | mangelhaft |
| 0 – 11 P | 6 | ungenügend |
