Java BlueJ: Unexpected Type: Required: Variable, Found: Value?
Ich möchte prüfen ob ein Dreieck konstruierbar ist wenn die Seitenlängen als parameter übergeben werden. ich habe dazu folgendes Struktogramm gegeben. er spuckt mir aber die Fehlemerldung: "Unexpected Type: Required: Variable, Found: Value" bei zeile 2 ("if.......") aus. Allerdings nur bei den ersten beiden ausdrücken zwischen den ODER operatoren (siehe rote wellenlinien im quelltext), nicht bei der letzem ausdruck. Was mache ich falsch?
1 Antwort
Deine Zuweisungsoperatoren verursachen das Problem.
Wenn man die einzelnen Ausdrücke
(a + b) < c
(b + c) < a
(a + c) < b
auswertet, erhält man für jeden einen boolschen Wert (true oder false). So stände letztendlich so etwas wie
true |= true |= true
dort (einmal unter Annahme, jeder Ausdruck wäre wahr). Das hieße, Java müsste im nächsten Schritt einen konstanten Wert (true) überschreiben.
true = true | true
Das ist aber nicht möglich. Genauso wenig kannst du Zahlen oder Zeichen überschreiben:
1 = 2;
'a' = 'b';
Das einzige, was erlaubt ist, ist das Überschreiben einer Variable, denn sie zeigt stets nur auf konstante Werte (oder Objekte) im Speicher.
boolean value = true;
value = false; // reassign
Somit dürfte für dich die Fehlermeldung nun verständlich sein.
Zur Lösung des Problems: An sich möchtest du doch lediglich prüfen, ob einer der Ausdrücke wahr ist (A ODER B ODER C). Daher ist auch der logische Verknüpfungsoperator OR angebracht:
if ((a + b) < c || (b + c) < a || (a + c) < b)
Dazu noch ein Rat: Setze Leerzeichen zwischen deine Operatoren. Es macht solche Ausdrücke besser leserlich. Wenn die Zeile dabei zu lang wird, kann man sie auch umbrechen:
if ((a + b) < c
|| (b + c) < a
|| (a + c) < b)