MINT lernen

Probe-Klassenarbeit

Eine komplette Probe-Klassenarbeit zum Java-Kapitel mit 50 Punkten in 45 Minuten — mit automatischer Auswertung, Note und Erwartungshorizont.

Punkte0 / 50
Note—
Bearbeitet0 / 0
Bearbeitungszeit45 Minuten
AFB I

Wissen und Reproduzieren

16 Punkte
A1
Vom Quelltext zur Ausgabe
AFB I 4 Punkte

Lea hat das Programm Rakete geschrieben und bringt es zum Laufen.

Ordne jedem Eintrag die passende Beschreibung zu. 4 P
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.

A2
Rechnen mit int und double
AFB I 4 Punkte
Gib jeweils den Wert an, den Java berechnet. 4 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.

A3
Die Klassenkarte Rucksack
AFB I 4 Punkte
Rucksack
  • - volumen: Ganzzahl
  • - gewicht: Fließkommazahl
  • c Rucksack(volumen: Ganzzahl)
  • + getGewicht(): Fließkommazahl
  • + einpacken(kg: Fließkommazahl)
  • + istVoll(): Wahrheitswert
a) Nenne für jeden Eintrag, worum es sich handelt. 2 P
b) Welcher Java-Methodenkopf gehört zu + einpacken(kg: Fließkommazahl)? 2 P
Lö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).

A4
Tore der Saison
AFB I 4 Punkte
int[] tore = {2, 0, 3, 1, 4};
int summe = 0;
for (int i = 1; i < tore.length; i++) {
    summe = summe + tore[i];
}
a) Entnimm dem Code die Werte von tore.length, tore[3] und dem größten gültigen Index. 3 P
b) Welchen Wert hat summe nach der Schleife? 1 P
Lö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).

AFB II

Zusammenhänge herstellen

22 Punkte
A5
Die Schleife verfolgen
AFB II 6 Punkte
int s = 0;
for (int i = 3; i <= 15; i += 4) {
    if (i > 8) {
        s = s + i;
    } else {
        s = s - 1;
    }
}
Bestimme mithilfe einer Tabelle für i und s: 6 P
Lö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).

A6
Rabatt im Sportgeschäft
AFB II 5 Punkte
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) Berechne die Werte von a und b. 3 P
b) Was gibt die letzte Zeile aus? 2 P
Lö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).

A7
Zwei Spardosen
AFB II 6 Punkte
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);
Ermittle den Zustand nach den fünf Zeilen in main. 5 P
€
€
d) Welchen Wert hat das Attribut offen von Mias Spardose? 1 P
Lö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).

A8
Das Jugendkonto
AFB II 5 Punkte
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);
a) Was muss an der Stelle „Zeile X“ stehen? 1 P
b) Welchen Wert liefert j.getStand() nach den drei Abhebungen? 2 P
€
c) Analysiere, welche Anweisungen javac in main übersetzt. (mehrere Antworten richtig) 2 P
Lö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).

AFB III

Verallgemeinern und beurteilen

12 Punkte
A9
Suche im Kochbuch
AFB III 6 Punkte

Ein 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;
    }
}
a) Wie viele Vergleiche braucht suche("Pfannkuchen")? 2 P
b) Wie viele Vergleiche braucht suche("Lasagne"), wenn es keine Lasagne gibt? 1 P
c) Jedes der 12 Rezepte wird gleich oft gesucht. Wie viele Vergleiche sind es im Mittel? 1 P
d) Beurteile die Aussagen: Welche sind richtig? (mehrere Antworten richtig) 2 P
Lö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).

A10
Der Kiosk übersetzt nicht
AFB III 6 Punkte

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();
    }
}
a) Überprüfe das Programm: Welche Stellen muss Jonas ändern, damit javac es übersetzt? (mehrere Antworten richtig) 4 P
b) Jonas ändert den Rückgabetyp von 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 P
€
Lö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

Erreicht
0 / 50
Prozent
0 %
Note
—
AufgabeThemaPunkte

Notenschema

PunkteNoteBeurteilung
46 – 50 P1sehr gut
40 – 45 P2gut
30 – 39 P3befriedigend
22 – 29 P4ausreichend
12 – 21 P5mangelhaft
0 – 11 P6ungenügend