Warum bekommt in Java jeder von fünf Leuten vier Pizzastücke — und niemand erfährt, dass es eigentlich 4,8 wären?
Dein Fortschritt:
0 / 0 Aufgaben
1
Übungsaufgaben
Zehn Übungen zum Klicken, Ziehen und Knobeln — von AFB I bis AFB III. Jede Übung gibt dir sofort Rückmeldung; wenn du hängst, helfen dir die gestuften Tipps.
A1
Was übersetzt javac?
AFB I
Für ein Schülerprofil werden Variablen angelegt. Welche Zeilen lassen sich fehlerfrei übersetzen?
Mehrere Antworten sind richtig. Markiere alle zutreffenden und klicke dann auf „Prüfen“.
Eine ganze Zahl passt ohne Verlust in eine double-Variable — temperatur speichert 21.0. Umgekehrt nicht: Bei int handys = 3.5; meldet javac „possible lossy conversion from double to int“. "ja" ist ein Text, kein Wahrheitswert; "L" in doppelten Anführungszeichen ist ein String, kein char; und 14 ohne Anführungszeichen ist eine Zahl, kein Text. Java wandelt hier nichts heimlich um.
Ansatz: Bestimme zuerst den Typ des Werts rechts: ganze Zahl, Kommazahl, Text in "…", Zeichen in '…' oder true/false?
Weiter: Nur eine Umwandlung macht Java automatisch: von int nach double, weil dabei nichts verloren geht.
A2
Stimmt's? — Typen in Java
AFB I
Fünf Behauptungen über statische Datentypen.
Fünf Aussagen nacheinander. Eine falsche Einschätzung reicht — dann startest du die Serie mit „Neue Runde“ neu.
Aussage 1 von 5
Merksatz: In Java hat jede Variable einen festen Typ, den du bei der Deklaration nennst. Einfache Anführungszeichen stehen für genau ein Zeichen, doppelte für Text. final macht aus einer Variable eine Konstante.
Ansatz: „Statisch“ bedeutet „fest“: Was darf sich an einer Variable ändern — der Wert, der Typ oder beides?
Weiter: Achte auf die Art der Anführungszeichen. Und „final“ heißt auf Deutsch „endgültig“.
A3
Der passende Typ fürs Profil
AFB I
Eine Social-Media-App speichert diese Daten. Welcher Typ passt jeweils am besten?
Klicke links einen Eintrag an und dann rechts den passenden — es entsteht eine Verbindungslinie. Mit der Tastatur: Enter zum Auswählen, ↑/↓ zum Wandern.
Denkfrage für jede Größe: Kann es Nachkommastellen geben (→ double)? Gibt es nur ja/nein (→ boolean)? Ist es genau ein Zeichen (→ char) oder beliebig langer Text (→ String)? Follower zählt man — halbe Follower gibt es nicht, also int. Typischer Fehler: String für alles nehmen. Dann kann man mit den Werten aber nicht mehr rechnen.
Ansatz: Beginne mit den eindeutigen Fällen: ja/nein-Fragen und Kommazahlen.
Weiter: char speichert genau ein Zeichen, String eine Zeichenkette aus beliebig vielen Zeichen.
A4
Pizzaabend
AFB II
Fünf Freunde teilen sich drei Pizzen mit je acht Stücken.
int pizzen = 3;
int stuecke = 8;
int personen = 5;
int gesamt = pizzen * stuecke;
int jeder = gesamt / personen;
int rest = gesamt % personen;
double fair = gesamt / personen;
double genau = gesamt / 5.0;
Rechne die Kette Schritt für Schritt: Erst wenn ein Schritt stimmt, wird der nächste freigeschaltet. Enter prüft.
Wert von jederStücke
Wert von restStücke
Wert von fair (Achtung!)
Wert von genau
24 / 5 ist bei zwei int-Werten eine Ganzzahldivision: 4, der Rest 4 steckt in %. Die Falle ist fair: Rechts wird zuerst mit int gerechnet (4), erst danach wird das Ergebnis in 4.0 umgewandelt — die Nachkommastellen sind da längst weg. Erst wenn ein Operand eine Kommazahl ist (5.0), rechnet Java mit double und liefert 4.8.
Ansatz: gesamt = 24. Bei int / int schneidet Java alles hinter dem Komma ab; % liefert den Rest.
Weiter: Java rechnet zuerst die rechte Seite aus — mit den Typen, die dort stehen. Erst danach wird das Ergebnis in die Variable links gelegt.
A5
Typ und Wert von Ausdrücken
AFB II
Welchen Typ hat jeder Ausdruck — und welchen Wert?
Wähle in jedem Menü die passende Angabe und klicke dann auf „Prüfen“.
Ausdruck
Typ
Wert
17 / 4
17 % 4
17 / 4.0
"Level " + 4 + 2
4 + 2 + " Leben"
(int) 9.99
Die Typen der Operanden bestimmen den Typ des Ergebnisses: int mit int bleibt int, sobald eine Kommazahl dabei ist, wird es double. Bei + entscheidet die Reihenfolge: Steht zuerst ein String, wird alles danach angehängt („Level 42“); stehen zuerst zwei Zahlen, rechnet Java erst 4 + 2 = 6 und hängt dann „ Leben“ an. (int) schneidet ab und rundet nicht — aus 9.99 wird 9.
Ansatz: Gehe von links nach rechts: Welche Typen treffen bei jedem Rechenzeichen aufeinander?
Weiter: "Level " + 4 ergibt schon den Text "Level 4". Was passiert, wenn man an einen Text noch eine 2 hängt?
A6
Ellas Sparplan
AFB II
Ella will von ihrem Taschengeld 20 % sparen, bis sie 150 € für Kopfhörer hat. Drei Zeilen lassen sich nicht übersetzen — finde sie.
In diesem Text stecken Fehler. Klicke genau die falschen Zeilen an — die richtigen musst du stehen lassen.
Am häufigsten übersehen wird Zeile 3: 25 · 0,2 = 5 sieht nach einer ganzen Zahl aus — aber javac schaut nur auf die Typen, nicht auf das Ergebnis. int mal double ist immer double. Zeile 6 ist korrekt: Text plus Zahl ergibt einen Text.
Ansatz: Bestimme bei jeder Zuweisung den Typ der rechten Seite und vergleiche ihn mit dem Typ links.
Weiter: Achte auf final und auf die Art der Anführungszeichen.
A7
Linas Notenschnitt
AFB II
Lina hat in Mathe die Noten 2, 3 und 2. Baue eine Anweisung, die den genauen Durchschnitt in der Variable schnitt speichert — zwei Bausteine bleiben übrig.
Setze die Anweisung von links nach rechts zusammen. Ein Klick legt den Baustein auf den nächsten freien Platz, ein Klick in der Anweisung legt ihn zurück. Enter funktioniert genauso.
double schnitt = (2 + 3 + 2) / 3.0; liefert 2.3333333333333335. Mit / 3 stünde 7 / 3 = 2 da — und selbst double schnitt = … / 3; ergäbe nur 2.0, weil die Nachkommastellen schon bei der Ganzzahldivision verschwinden. int kann den Schnitt gar nicht speichern. Die Klammern sind nötig, sonst würde nur die letzte 2 geteilt (Punkt vor Strich).
Ansatz: Ein Notenschnitt hat Nachkommastellen. Welcher Typ passt?
Weiter: Der richtige Typ links reicht nicht: Auch die Division rechts muss mit einer Kommazahl passieren.
A8
Was zeigt der Spielstand?
AFB IIIMix
Ein Handyspiel gibt den Spielstand aus. Denk auch an print und println aus 1.1.1.
Schreibe jede Zeile der Konsole genau so ab, wie sie erscheint. Leerzeichen sind egal. Enter prüft.
1. Zeile:
2. Zeile:
3. Zeile:
Zeile 1: „Level “ + 7 ist schon Text, deshalb wird die 1 angehängt — „Level 71“, nicht „Level 8“. Weil nur print steht, folgt „ | XP: 10.5“ in derselben Zeile. Zeile 2: 7 / 2 = 3 (Ganzzahldivision) plus 7 % 2 = 1 ergibt 4. Zeile 3: 7 / 2.0 = 3.5, dahinter hängt das „!“ direkt an. Java gibt Kommazahlen immer mit Punkt aus.
Ansatz: Markiere, welche Anweisungen einen Zeilenumbruch erzeugen. Nur println beendet eine Zeile.
Weiter: Werte + von links nach rechts aus. Sobald ein Text beteiligt ist, wird angehängt statt gerechnet.
A9
Ausdrucks-Memory
AFB III
Finde zu jedem Ausdruck seinen Wert. Die Werte liegen gefährlich nah beieinander — der Typ entscheidet.
Decke zwei Karten auf, die zusammengehören. Mit der Tastatur: Tab zur Karte, Enter aufdecken, Pfeiltasten zum Wandern.
19 / 5 = 3 Rest 4: Der Quotient (3) und der Rest (4) sind zwei verschiedene Operationen. (int) 5.99 schneidet ab und liefert 5, nicht 6. Bei den Texten entscheidet die Reihenfolge: „19“ + 5 hängt an („195“), 19 + 5 + „!“ rechnet zuerst (24) und hängt dann an.
Ansatz: Rechne jeden Ausdruck erst im Kopf aus und merke dir das Ergebnis, bevor du Karten aufdeckst.
Weiter: Ergebnisse mit Anführungszeichen sind Texte. Ein Ergebnis mit Punkt entsteht nur, wenn eine Kommazahl beteiligt ist.
A10
Trick: Prozent
AFB IIITrick
Bei einer Umfrage haben 3 von 4 Leuten für den Kinobesuch gestimmt. Tom will den Anteil in Prozent berechnen:
Überlege selbst und trage das Ergebnis ein — Enter prüft direkt.
Ausgegeben wird 0.0. Java rechnet von links: 3 / 4 sind zwei ints → Ganzzahldivision → 0. Dann 0 · 100 = 0, und erst ganz am Ende wird daraus 0.0 für die double-Variable. Dass links double steht, hilft nicht. Richtig wären 3.0 / 4 * 100 oder 3 * 100 / 4 (dann 75).
Ansatz: Rechne genau so, wie Java es tut: von links nach rechts, mit den Typen, die dort stehen.
Weiter: Welchen Typ haben 3 und 4? Was ergibt dann 3 / 4?