Variablen-Schreibtischtest
Informatik · Gymnasium · Klassen 10–13 · PRIMM-Methode
🎯 Worum geht's? Klasse 10–13 · 1 Unterrichtsstunde
Nach dieser Seite kannst du …
- Wertzuweisungen Zeile für Zeile in einer Tabelle verfolgen
- die Belegung aller Variablen nach einem Programmstück angeben
- Datentypen und Rechenoperationen dabei richtig berücksichtigen
Vorwissen: keines
📝 Aufgaben
Jede Aufgabe hat fünf Schritte: Predict › Run › Investigate › Modify › Make. Wähle eine Aufgabe aus – oder nutze oben die Leiste „Aufgaben: 1, 2, 3 …“.
📖 Worum geht es?
Du lernst, den Zustand von Variablen Schritt für Schritt zu verfolgen – ohne den Code auszuführen. Datentypen, Ausdrücke, Typumwandlungen und Scope stehen im Mittelpunkt.
🏅 Zuletzt verdiente Badges
Analysiere den folgenden Code, ohne ihn auszuführen.
ergebnis am
Ende?Bestimme nach jeder Zeile den aktuellen Wert jeder Variable.
| Zeile | Anweisung | a | b | ergebnis |
|---|---|---|---|---|
| 1 | int a = 7; | – | – | |
| 2 | int b = 2; | – | ||
| 3 | int ergebnis = a / b; | |||
| 4 | ergebnis = ergebnis + 1; |
int / int rechnet Java ganzzahlig: Der Nachkommateil wird abgeschnitten, nicht gerundet. Was bleibt bei 7 / 2 übrig?
Was wäre das Ergebnis von 7 / 2, wenn a als double deklariert
wäre?
Nenne den Operator, der den Rest einer Ganzzahldivision liefert.
Modifiziere genau eine Zeile, sodass ergebnis nach Zeile 3 den Wert
3.5 enthält (am Ende also 4.5).
double ist. Wie machst du a oder b vor der Division zu einem double?Implementiere teileGenau: Gibt a / b als double zurück.
double sein – zum Beispiel durch einen Cast.c am Ende? (Tipp: 'A' = 65)Bestimme nach jeder Zeile den aktuellen Wert.
| Zeile | Anweisung | n (int) | c (char) | d (double) |
|---|---|---|---|---|
| 1 | int n = 65; | – | – | |
| 2 | char c = (char) n; | – | ||
| 3 | double d = n; | |||
| 4 | c = (char)(c + 1); |
(char) macht aus der Zahl das Zeichen mit diesem ASCII-Code. Eine double-Variable zeigt ganze Zahlen mit .0 an.Was passiert bei byte b = 127; b++;?
Welche Konvertierung ist eine implizite Erweiterung?
Modifiziere den Code so, dass d den Wert 65.5 erhält.
n addieren – oder welchen Wert direkt zuweisen –, damit 65.5 herauskommt?Implementiere naechsterBuchstabe: 'A' → 'B' · 'Z'
→ 'A'
c - 'A'), gehe eins weiter und sorge mit % 26 dafür, dass nach Z wieder A kommt. Zum Schluss zurück in ein char umwandeln.aussage am
Ende?| Zeile | Anweisung | x | y | p | q | aussage |
|---|---|---|---|---|---|---|
| 1 | int x = 5; | – | – | – | – | |
| 2 | int y = 10; | – | – | – | ||
| 3 | boolean p = x < y; | – | – | |||
| 4 | boolean q = y % 3 == 0; | – | ||||
| 5 | boolean aussage = p && !q; |
10 % 3? Und was macht ! aus false?Was liefert true || (1/0 == 0) in Java?
Welcher Ausdruck prüft, ob
n gerade ist?
Modifiziere die Zeile mit aussage so, dass der Ausdruck true ergibt,
wenn mindestens eine der Bedingungen gilt.
Implementiere istSchaltjahr: durch 4 teilbar, außer durch 100 – es sei denn, auch durch
400.
%: durch 4 teilbar UND nicht durch 100 teilbar – ODER durch 400 teilbar.x gilt wo?| Zeile | Anweisung | Ausgabe |
|---|---|---|
5 (in zeige()) |
System.out.println(x); | |
10 (in main) |
System.out.println(x); |
zeige() – gibt es dort eine eigene Variable x?Zeile 10 steht in
main – dort gibt es keine lokale Variable x.
Was versteht man unter Shadowing?
Was passiert bei int x = 10; { int x = 20; }
innerhalb einer Methode?
Modifiziere den Code so, dass beide println-Aufrufe den Wert 20 ausgeben.
int x = … legt zeige() eine neue lokale Variable an. Was passiert, wenn du stattdessen der vorhandenen Klassenvariable einen Wert zuweist?Implementiere tausche: gibt {b, a} zurück.
tausche(3, 7) → {7, 3}
new int[]{…, …}. In welcher Reihenfolge kommen a und b hinein?| Zeile | Anweisung | s | n | Ausgabe |
|---|---|---|---|---|
| 1 | String s = "1"; | – | – | |
| 2 | int n = 2; | – | ||
| 3 | s = s + n; | – | ||
| 4 | System.out.println(s + n); |
+ „aneinanderhängen“, nicht „addieren“ – von links nach rechts.Was ergibt "" + 1 + 2?
Was ergibt 1 + 2 + ""?
Speichere statt des Strings die Zahl 3 in summe.
Integer.parseInt(…) in eine Zahl um, bevor du addierst.Implementiere wiederhole: wiederhole("ab", 3) → "ababab"
n-mal s an.y am Ende?
| Zeile | Anweisung | a | b | y |
|---|---|---|---|---|
| 1 | int a = 3; | – | – | |
| 2 | int b = a++; | – | ||
| 3 | int y = ++a + b; |
a++ liefert erst den alten Wert und erhöht danach; ++a erhöht erst und liefert dann den neuen Wert. Notiere nach jeder Zeile a, b und y.Unterschied zwischen x++ und
++x als Ausdruck?
Was ergibt
int x = 5; int y = x-- - --x;?
Ersetze a++ durch ++a und ergänze einen Kommentar mit den neuen Werten.
a++ in Zeile 2 durch ++a und verfolge die Werte noch einmal Zeile für Zeile.Implementiere stellenwert: Gibt die Ziffer an Position stelle (0-basiert,
von rechts).
stellenwert(1234, 0) → 4 · stellenwert(1234, 2) →
2
n % 10 liefert die letzte Ziffer, n / 10 schneidet sie ab. Wie oft musst du abschneiden, um an die gewünschte Stelle zu kommen?Analysiere den folgenden Code, ohne ihn auszuführen.
| Zeile | Anweisung | arr[0] | copy | copy[0] |
|---|---|---|---|---|
| 1 | int[] arr = {1,2,3}; | – | – | |
| 2 | int[] copy = arr; | |||
| 3 | copy[0] = 99; | |||
| 4 | System.out.println(arr[0]); |
copy = arr legt kein neues Array an – beide Variablen zeigen auf dasselbe Array.Unterschied zwischen copy = arr und
copy = arr.clone()?
Was gibt arr == copy aus,
wenn copy = arr?
Modifiziere eine Zeile, sodass arr[0] nach der Zuweisung 1 bleibt.
Implementiere verdopple: Gibt ein neues Array zurück, in dem jedes Element verdoppelt
ist.
verdopple({1,2,3}) → {2,4,6}
| Zeile | Anweisung | p1.name | p1.alter | p2.name | p2.alter |
|---|---|---|---|---|---|
| 1 | Person p1 = new Person("Anna",25); | – | – | ||
| 2 | Person p2 = p1; | ||||
| 3 | p2.alter = 30; | ||||
| 4 | System.out.println(p1.name + " " + p1.alter); |
p2 = p1 kopiert nur den Verweis auf das Objekt – nicht das Objekt selbst.Was passiert bei
Person p3 = null; p3.alter = 5;?
Wie prüft man sicher, ob eine Referenz nicht null ist?
Modifiziere den Code, sodass p1.alter nach der Änderung noch 25 ist.
p2 ein eigenes Objekt ist, muss es mit new erzeugt werden.Implementiere aelter: gibt neue Person mit erhöhtem Alter zurück.
p.aelter(5) bei Person("Anna",25) → Person("Anna",30)
this.alter, sondern erzeuge mit new Person(…) eine neue Person mit gleichem Namen und höherem Alter.| Zeile | Anweisung | a | b | c |
|---|---|---|---|---|
| 1 | String a = "Hallo"; | – | – | |
| 2 | String b = a; | – | ||
| 3 | String c = a + "Welt"; | |||
| 4 | System.out.println(a); |
a + "Welt" erzeugt einen neuen String. Was steht danach noch in a?Was gibt "Hallo" == "Hallo" aus (beide
Literale)?
Welche Methode vergleicht den Inhalt zweier Strings?
Ersetze den ==-Vergleich durch einen korrekten Inhaltsvergleich mit
.equals().
== prüft, ob es dasselbe Objekt ist. Welche Methode vergleicht den Inhalt?Implementiere palindrom: Groß-/Kleinschreibung ignorieren.
palindrom("Racecar") → true · palindrom("Java") →
false
| Kontext | Anweisung | x (main) | arr[0] (main) |
|---|---|---|---|
| main: Z1 | int x = 5; | – | |
| main: Z2 | int[] arr = {10}; | ||
| nach verdoppeln(x) | verdoppeln(x) aufgerufen | ||
| nach verdoppeln(arr) | verdoppeln(arr) aufgerufen |
int bekommt die Methode eine Kopie des Werts, beim Array eine Kopie des Verweises. Was ändert sich dadurch jeweils in main?Warum ändert verdoppeln(int n) das
Original x nicht?
Wie gibt man einen neuen Wert aus einer Methode zurück?
Passe verdoppeln an, sodass x danach 10 ist.
return zurückgeben – und main muss ihn in x speichern.Implementiere fuelle: Füllt ein Array in-place mit val.
fuelle(arr, 7) mit {0,0,0} → {7,7,7}
🏅 Deine Badges
Verdiente Badges leuchten auf.
📊 Statistik
↺ Fortschritt zurücksetzen
Achtung: Alle Daten werden unwiderruflich gelöscht.
📄 Arbeitsblatt erstellen
Wähle aus, welche Bereiche auf das Arbeitsblatt kommen. Es enthält dann alle … Aufgaben dieser Seite aus diesen Bereichen – mit Kästchen zum Ankreuzen, leeren Tabellen und Platz zum Schreiben, ohne Lösungen und Tipps.