studyklar
GdI 1 · Beispielklausur · Aufgabe 6

Schreibtischtest: switch ohne break und eine while-Schleife über Ziffern

Ein Schreibtischtest spielt ein Programm von Hand durch, Zeile für Zeile, und schreibt die Werte der Variablen mit. Genau das verlangt diese Klausuraufgabe zweimal: einmal für eine switch-Anweisung ohne break, einmal für eine while-Schleife, die eine Zahl Ziffer für Ziffer zerlegt. Rechts stehen das Programm und die Tabelle des Schreibtischtests. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 6

a) Ermitteln und notieren Sie die Ausgabe des folgenden Programms A6a und erläutern Sie, wie es dazu kommt!

class A6a {  public static void main(String[] args) {    int zahl = 3;    StringBuilder ergebnis = new StringBuilder();    switch (zahl) {      case 1: ergebnis.append("Eins");      case 2: ergebnis.append("Zwei");      case 3: ergebnis.append("Drei");      case 4: ergebnis.append("Vier");      default: ergebnis.append("Default");    }    System.out.println(ergebnis);  }}

b) Ermitteln Sie – nachvollziehbar durch einen Schreibtischtest – die Anzahl der Durchläufe durch die im folgenden Programm A6b enthaltene While-Schleife, wenn die Zahl 2025 eingegeben wird!

class A6b {  public static void main (String[ ] args) {    int x = In.readInt();    int y = 0;    while (x!=0) {      y += x%10;      x = x / 10;    }    Out.println("Result = " +  y);  }}

c) Welche Ausgabe erzeugt das Programm A6b bei Eingabe der Zahl 1234?

Beide Programme sind fertig vorgegeben. Wir schreiben kein Programm, sondern sagen voraus, was es tut. In der Klausur gibt es dafür keinen Rechner und keinen Computer: Man spielt das Programm auf Papier durch. Punkte nennt die Beispielklausur für diese Aufgabe nicht.

  • a) Gesucht ist die Ausgabe von A6a und eine Erklärung. Die Ausgabe allein reicht nicht: Man muss sagen, welche Zeilen in welcher Reihenfolge laufen.
  • b) Gesucht ist eine Zahl: wie oft der Schleifenrumpf bei der Eingabe 2025 ausgeführt wird. „Nachvollziehbar“ heißt: Eine Tabelle mit den Werten von x und y je Durchlauf muss dastehen.
  • c) Gesucht ist die genaue Ausgabezeile von A6b bei der Eingabe 1234, mit allen Zeichen.
Merke: Bei einem Schreibtischtest rechnet man nichts im Kopf voraus. Man geht Anweisung für Anweisung vor und schreibt nach jeder Anweisung auf, welche Variable welchen Wert hat.
  1. a) Klären, was der StringBuilder und append tun.
  2. a) Der switch springt zur passenden Marke.
  3. a) Was ohne break danach passiert, und die Ausgabe.
  4. b) Startwerte, dann Rest und Division durch 10.
  5. b) Die Schleife Durchlauf für Durchlauf, bis x = 0 ist.
  6. c) Dieselbe Tabelle für 1234, dann die Ausgabezeile.

Der StringBuilder ergebnis und append

    StringBuilder ergebnis = new StringBuilder();

Zeile 3 legt zahl mit dem Wert 3 an. Zeile 4 legt einen StringBuilder an: einen Text, den man nachträglich verändern kann. Er heißt ergebnis und ist zu Beginn leer.

ergebnis.append("Drei") hängt den Text Drei hinten an. Es kommt genau dieser Text dazu, ohne Leerzeichen davor oder danach.

Aus Blatt 9, Aufgabe 1 („StringBuilder: einen String Schritt für Schritt verändern“): new StringBuilder() legt einen leeren StringBuilder an, append(s) hängt den String s hinten an.

switch springt zur Marke case 3

    int zahl = 3;
    switch (zahl) {
      case 3: ergebnis.append("Drei");

Die switch-Anweisung vergleicht den Wert von zahl mit den case-Marken. zahl ist 3, also springt das Programm direkt zur Marke case 3:. Die Zeilen mit case 1 und case 2 liegen davor und werden nicht ausgeführt. Eins und Zwei kommen also nie in ergebnis.

Aus Skript 4, Folien 4-45 und 4-46 („Switch-Anweisung“): switch springt zu der case-Marke, deren Wert passt; passt keine, zu default. Ab dort läuft das Programm Zeile für Zeile weiter, bis ein break kommt oder die switch-Anweisung zu Ende ist.
Noch 14 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1a) switch ohne break

Programm A6a

class A6a {  public static void main(String[] args) {    int zahl = 3;    StringBuilder ergebnis = new StringBuilder();    switch (zahl) {      case 1: ergebnis.append("Eins");      case 2: ergebnis.append("Zwei");      case 3: ergebnis.append("Drei");      case 4: ergebnis.append("Vier");      default: ergebnis.append("Default");    }    System.out.println(ergebnis);  }}
Markehängt anausgeführt?
case 1"Eins"?
case 2"Zwei"?
case 3"Drei"?
case 4"Vier"?
default"Default"?
ergebnis?
Legendegerade gemeintDas Programm A6a aus Teil a). „?“ in der Tabelle heißt: noch nicht erklärt.