Lösungen zu dem Buch Java lernen mit BlueJ – Disclaimer

Ich habe diese Lösungen vor längerer Zeit verfasst und mittlerweile gibt es eine neuere Auflage. Dies bedeutet, dass die Nummern des Buches nicht mehr mit den Nummern hier übereinstimmen. Wer noch ein Buch übrig hat, kann es mir gerne schicken und ich werde diese Seite in Zukunft ausbauen.

Bitte benutze diese Seite nicht, um abzuschreiben, oder zu spicken. Programmieren lernt man nicht durch abschreiben, sondern durch try & error. Diese Lösungen sollen dir nur als Kontrolle dienen.

Kontaktformular

Kapitel 1

Übung 1.06
Übung 1.15
Übung 1.27
Übung 1.28
Übung 1.29
Übung 1.30
Übung 1.31
Übung 1.32

Kapitel 2

Übung 2.08
Übung 2.10
Übung 2.11
Übung 2.12
Übung 2.14
Übung 2.15
Übung 2.16
Übung 2.17
Übung 2.18
Übung 2.19
Übung 2.20
Übung 2.29
Übung 2.30
Übung 2.31
Übung 2.32
Übung 2.33
Übung 2.39
Übung 2.40
Übung 2.41
Übung 2.42
Übung 2.49
Übung 2.50
Übung 2.59
Übung 2.60
Übung 2.61
Übung 2.62
Übung 2.63
Übung 2.64
Übung 2.65
Übung 2.66
Übung 2.67
Übung 2.68
Übung 2.71
Übung 2.72
Übung 2.73
Übung 2.74
Übung 2.76
Übung 2.77
Übung 2.78
Übung 2.79
Übung 2.80
Übung 2.81
Übung 2.82
Übung 2.83

Kapitel 3

Übung 3.08
Übung 3.09
Übung 3.10
Übung 3.11
Übung 3.12
Übung 3.15
Übung 3.16
Übung 3.17
Übung 3.18
Übung 3.19
Übung 3.20
Übung 3.24
Übung 3.25
Übung 3.26
Übung 3.27
Übung 3.28
Übung 3.29 & 3.30
Übung 3.44

Kapitel 4

Übung 4.02
Übung 4.03
Übung 4.04
Übung 4.05
Übung 4.06
Übung 4.07
Übung 4.08
Übung 4.09
Übung 4.10
Übung 4.12
Übung 4.15
Übung 4.16
Übung 4.17
Übung 4.18

Lösungen

Kapitel 1

Übung 1.06

BlueJ erwartet als Eingabe den Namen der Farbe. Der Name der Farbe wird in einem String gespeichert. Lässt man die Anführungszeichen weg, handelt es sich bei der Eingabe nicht mehr um einen String. BlueJ kann die Eingabe also nicht verarbeiten.

Übung 1.15 & Übung 1.16

Übung 1.27

  • 0 – Einer der Zahlendatentypen.
  • "hallo" – String
  • 101 – Einer der Ganzzahldatentypen
  • -1 – Einer der Ganzzahldatentypen
  • true – boolean
  • "33" – String
  • 3.1415 – Einer der beiden „Gleitpunktdatentypen“ (float oder double)

Übung 1.28

Übung 1.29

public void senden(String sendeString)

Gefragt ist nach der Signatur der Methode, also ist der Methodenrumpf an dieser Stelle uninteressant. Der Name des Parameters ist nicht vorgeschrieben, er kann also frei gewählt werden. In diesem Fall habe ich mich für sendeString entschieden.

Übung 1.30

Das ist die Signatur der Methode. Für Interessierte gibt es hier die komplette Implementierung der Methode:

Dabei ist zu beachten, dass der Datentyp int nur ganze Zahlen anzeigen kann. Das bedeutet, dass immer abgerundet wird. (16+15)/2 ergibt also 15

Übung 1.31

Das Buch selber ist ein Objekt. Die Klasse könnte “Buch” heißen und Datenfelder seitenzahl, titel und autoren haben. Welche Werte hätten diese Datenfelder bei dem Buch-Objekt, das Sie gerade lesen?

Übung 1.32

Ganz klar: Nein! Ein Objekt kann immer nur von einer Klasse erzeugt werden.

Kapitel 2

Übung 2.08

Das Schlüsselwort public kann weggelassen werden. Warum es hier weggelassen werden kann, wird zu einem späteren Zeitpunkt erklärt, wenn es um Sichtbarkeit geht.

Übung 2.10

Ein Konstruktor sieht immer so aus: public Konstruktorname(eventuell Parameter) Ein Konstruktor hat keinen Rückgabewert – also auch kein void. Der Konstruktor muss immer genauso heißen, wie die Klasse – also auch mit einem Großbuchstaben beginnen.

Übung 2.11

  • private int zaehler; – int
  • private Student student; – Student
  • private Server server; – Server

Übung 2.12

  • private boolean lebendig; – lebendig
  • private Person tutor; – tutor
  • private Spiel spiel; – spiel

Eine Datenfelddeklaration sieht also wie folgt aus:

Sichtbarkeit Datentyp Datenfeldname

Da zu diesem Zeitpunkt noch nichts über die Sichtbarkeit gesagt worden ist, sollte man für Datenfelder immer private als Sichtbarkeit nehmen.

Übung 2.14

Ja! Semikolon nicht vergessen!

Übung 2.15

private int status;

Übung 2.16

Zu der klasse Student

Übung 2.17

2 Stück. Einmal titel vom Typ String und einmal preis vom Typ double

Übung 2.18

Übung 2.19

Übung 2.20

Das Datenfeld preis ist eine globale Variable, die für die komplette Wir könnenKlasse gilt. Jede Methode kann auf diese Variable zugreifen. Wenn man nun im Konstruktor die Variable preis neu deklariert, indem man erneut ein int davorschreibt, so verdeckt diese lokale Vereinbarung die globale Variable preis. Der Ticketpreis, der in dem Parameter ticketpreis gespeichert ist, wird also nur lokal in der Konstruktorvariable preis gespeichert. Nachdem der Kosntruktor ausgeführt worden ist, ist dieser Inhalt verloren.

Übung 2.29

An drei Merkmalen: Die Methode hat einen Ergebnistyp (in diesem Fall void, sie liefert also keinen Wert); sie beginnt mit einem Kleinbuchstaben; und sie heißt nicht genauso, wie die Klasse.

Übung 2.30

Übung 2.31

oder:

Übung 2.32

oder:

Übung 2.33

Übung 2.38

Keine der beiden Versionen kann dafür benutzt werden, weil in beiden preis in Anführungszeichen steht, so dass nicht der Wert des Datenfelds preis, sondern der Text "preis" ausgegeben wird.

Übung 2.39

Übung 2.40

Übung 2.41

Übung 2.42

Übung 2.49

Voraussetzung ist, dass ergebnis schon als Variable vom Typ int vereinbart ist.

Übung 2.50

Voraussetzung ist, dass durchschnitt schon als Variable vom Typ int vereinbart ist.

Übung 2.51

Übung 2.59

Der Name der Methode ist gibName, der Ergebnistyp ist String.

Übung 2.60

Der Name der methode ist setzeKreditrahmen. Der Parameter hat den Namen rahmen und den Typ int.

Übung 2.61

Übung 2.62

Übung 2.63

Übung 2.64

Übung 2.65

Übung 2.66

Übung 2.67

Übung 2.68

Übung 2.71

Eine Exception (Meldung eines Fehlers während des Programmablaufs)wird ausgelöst, weil Java versucht auf eine Position in dem String zuzugreifen, die es nicht gibt. Die ersten 3 Zeichen kann Java noch lesen, aber dann versucht es auf ein viertes Zeichen zuzugreifen, das in diesem String nicht existiert. Da Java nicht “ins Leere” greifen kann, meldet es einen Fehler.

Übung 2.72

Übung 2.73

Übung 2.74 & Übung 2.75

Übung 2.76

Übung 2.77

Übung 2.78

Übung 2.79

Übung 2.80

Übung 2.81

Übung 2.82

Übung 2.83

Kapitel 3

Übung 3.08

Dann würde die Bedingung wahr sein, wenn der Ersatzwert größer oder gleich 0 ist, oder der ersatzwert kleiner als das Limit ist.

Übung 3.09

  • !(4 < 5) = !(true) = false
  • ! false = true
  • (2 > 2) || ((4 == 4) && (1 < 0)) = false || (true && false) = false || false = false
  • (2 > 2) || (4 == 4) && (1 < 0) = false || true && false = true && false = false
  • (34 != 33) && ! false = true && true = true

Übung 3.10

Beide wahr drückt man durch A && B aus und beide falsch drückt man durch !A && !B aus. Durch Verknüpfung dieser beiden Teilaussagen erhält man: (A && B) || (!A && !B). A == B bedeutet dasselbe.

Übung 3.11

Diese Aussage ist dann wahr, wenn einer der beiden Variablen falsch ist und die andere wahr. Also ergibt sich !A && B und A && !B. Diese werden wieder durch oder verknüpft. Das endgültige Ergebnis lautet also: (!A && B) || (A && !B)

Übung 3.12

!(A || B) kann umgeformt werden in !A && !B. Da !(A || B) umgangssprachlich beschrieben werden kann durch weder A noch B, erkennt man, dass !A && !B gelten muss. Aufgrund der doppelten Verneinug, Beispiel: !!A = A kann man also sagen, dass das Endergebnis: !(!A || !B) lauten muss. Also !(!A || !B) kann umgeformt werden in A && B

Übung 3.15

Der Modulo Operator liefert den Rest einer Division.

Übung 3.16

(8 % 3) = 2 Rest 2 also 2

Übung 3.17

(n % 5) = 0 bis 4 Da bei der Division durch 5 nur Reste von 0 bis 4 auftreten können.

Übung 3.18

(n % m) = Alle ganzen Zahlen von 0 bis m-1

Übung 3.19

erhoehen() Erhöht bei der Minutenanzeige den Wert solange um 1 bis wert den Wert 60 erreicht. Sobald wert den Wert 60 erreicht schlägt limit zu. limit ist im Falle der Minutenanzeige 60 und lässt somit nur die Werte 0-59 zu.

Übung 3.20

Der Weg über die Modulorechnung ist vielleicht nicht intuitiver, aber dafür eleganter.

Übung 3.24

Wenn man sich die Zeile new Editor("readme.txt",-1) anguckt, erkennt man, dass der Konstruktor schonmal Editor heißen muss. Übergeben werden hier 2 Parameter, ein String und eine Zahl. Der String scheint der Dateiname zu sein. Was die Zahl bedeuten soll ist sehr undurchsichtig.

Übung 3.25

Anstatt 15 und 20 kann jede beliebige Ganzzahl eingesetzt werden.

Übung 3.26

Der zweite Konstruktor bekommt die aktuelle Uhrzeit in der Form Stunden, Minuten übergeben und erzeugt eine Stundenanzeige und eine Minutenanzeige und ruft die Methode setzeUhrzeit mit der übergebenen Uhrzeit auf.

Übung 3.27

Die beiden Konstruktoren unterscheiden sich nur in der Anzahl ihrer Parameter. Konstruktor Nummer eins hat keine Parameter, dafür hat Konstruktor Nummer zwei, genau zwei Parameter. In Konstruktor Nummer zwei steht kein anzeigeAktualisieren, da dieser Konstruktor die Methode setzeUhrzeit aufruft und in dieser Methode anzeigeAktualisieren aufgerufen wird.

Übung 3.28

zum Beispiel

oder zum Beispiel

Übung 3.29 & 3.30

Änderungen in der Klasse Uhrenanzeige:

Übung 3.44

Die Klasse Bildschirm soll an dieser Stelle nicht ausprogrammiert werden. Die Klasse soll als fertig programmiert vorrausgesetzt werden und kann einfach verwendet werden.

Kapitel 4

Übung 4.02

ArrayList bibliothek;

Übung 4.03

10

Übung 4.04

elemente.get(4);

Übung 4.05

14, da bei 0 begonnen wird zu zählen.

Übung 4.06

notizen.add(treffen);

Übung 4.07

verabredungen.remove(2);

Übung 4.08

5

Übung 4.09

Übung 4.10

public void alleNotizenAusgeben()

Parameter werden nicht gebraucht, da keine bestimmte Notiz, sondern alle ausgegeben werden sollen. Ein Rückgabetyp wird auch nicht gebraucht, da nur eine Ausgabe gemacht werden soll.

Übung 4.12

Übung 4.15

Übung 4.16

Übung 4.17

Übung 4.18