Operatoren Möglicher Fehler im Buch Programmieren lernen mit Java

Rudi205

Mitglied
Hallo ,

Ich bin aktuell dabei das Buch durch zu arbeiten bin aber aktuell auf eine Aufgabe gestoßen die mir so nicht schlüssig erscheint.

Folgende Aufgabe ist gegeben:

Welche Ausgaben werden von folgendem Quellcode erzeugt?

Java:
System.out.println("c > b = " + c > b);

Java:
System.out.println("c > b = " + (c > b));

Als Lösung gibt der Autor nun folgendes an:

Fehler: System.out.println("c > b = " + c > b);

Aufgrund der Prioritäten wird zuerst c > b ausgewertet. Das Ergebnis von c > b ist ein

boolscher Wert. Dieser kann nicht mit + an eine Zeichenkette angehängt werden.

c > b = true


Ein wenig verwirrend das ganze. Ich nehme an die Ausgabe c > b = True ist die Ausgabe fuer die zweite System.out Ausgabe.

Die erste Ausgabe schlägt fehl, aber ich verstehe den Text dazu nicht. Er schreibt der Vergleich wird vor dem + ausgeführt , ich dachte allerdings das der + Operator eine höhere Priorität hat als der kleiner / größer Vergleich ?

Weiterhin sagt er man kann einen booleschen Wert nicht mit einem String verknüpfen, allerdings geschieht doch genau eben dies beim zweiten Aufgabenteil oder nicht?

Bitte um Aufklärung

Gruß
Rudi
 
Code:
int b = 5;
int c = 7;
System.out.println("c > b = " + c > b);
	Evaluation failed. Reason(s):
		The operator > is undefined for the argument type(s) String, int

der + Operator bindet in diesem Fall stärker als das >. Folglich versucht der Compiler
Code:
 "c > b = c" > b
zu compillieren, was natürlich nicht funktioniet (
Code:
The operator > is undefined for the argument type(s) String, int
)

Ohne die Seite des Buches bzw. den Kontext genau gesehen zu haben, möchte ich kein Kommenar dazu abgeben ob im Buch ein Fehler vorliegt oder nicht. Fakt ist jedenfalls die zuvor genannte Ausgabe in diesem Beispiel.
 
Zuletzt bearbeitet:
Also, wenn da steht, dass man einen boolschen Wert nicht mit "+" an einen String anhängen kann, ist das meiner Meinung nach falsch. Denn, wie du schon gesagt hast, passiert genau das in der Zeile:
Code:
System.out.println("c > b = " + (c > b));
 
Hey,

Vielen Dank für die Antwort.

Du gibst die Antwort doch schon selbst, das Plus bindet stärker als der Vergleichsoperator, der Autor schreibt doch aber genau das Gegenteil.

Er schreibt zuerst wird der Vergleich ausgeführt und a schließend wird versucht zu verknüpfen, was für den ersten Fall schlichtweg falsch ist, siehe dein Code Beispiel.

Also wie gesagt der Lösungstext zu der Aufgabe ist schlichtweg nicht richtig in meinem Augen.
 
aus welchem Jahr ist denn das Buch? Evntl. war das in früheren Java-Versionen unterschiedlich? (was ich aber nicht glaube)
 
Wenn da wirklich für folgende Zeile:
Java:
System.out.println("c > b = " + c > b);

Die Erklärung steht:
Fehler: System.out.println("c > b = " + c > b);
Aufgrund der Prioritäten wird zuerst c > b ausgewertet. Das Ergebnis von c > b ist ein
boolscher Wert. Dieser kann nicht mit + an eine Zeichenkette angehängt werden.



Dann ist das definitiv falsch, denn:
1. c > b wird nicht zuerst ausgewertet
2. Ein Boolscher Wert lässt sich mit + Operator an eine Zeichenkette anhängen
3. Richtig wäre: Fehler, da zuerst c mittels + Operator an die Zeichenkette angehängt wird und dann versucht wird mit dieser Zeichenkette ein 'ist grösser' Vergleich mit b zu machen. (Strings lassen sich nicht mit ><= vergleichen)

Ich wäre geneigt, den Autor darauf hinzuweisen. Aber weder kenne ich eine geeignete eMail Adresse, noch besitze ich das Buch (um es mal selber nach zu lesen).
 
Zuletzt bearbeitet:

Zurück
Oben