implizite Klammerung

JavaAnfänger1235

Bekanntes Mitglied
Hallo liebe Leute,
ich habe folgende Aufgabe:

Ihre Aufgabe ist es zu den folgenden Ausdrücken die implizite Klammerung vollständig anzugeben. Gehen Sie davon aus, dass die Variablen i, j und k vom Typ int, a und b vom Typ boolean sind, und entsprechend deklariert und initialisiert wurden:
Was muss ich da genau beachten.
Hier das 1. Beispiel:

a = i % j * k <= i * i * i || b;

Meine Lösung: a =( (i % j) * k )<= ((i * i * i )|| b);

Stimmt das. Der 1. Teil vor dem <= kann auch anders geklammert sein oder? Java rechnet doch von rechts nach links.
 

JavaAnfänger1235

Bekanntes Mitglied
Danke euch:)
D.h es müsste so sein :

a =( ((i % j) * k )<= (i * i * i ))|| b;
oder?
In der 1. Klammer könnte auch umgeklammert werden, da % und * die gleiche Priorität haben??
 

truesoul

Top Contributor
Danke euch:)
D.h es müsste so sein :

a =( ((i % j) * k )<= (i * i * i ))|| b;
oder?
In der 1. Klammer könnte auch umgeklammert werden, da % und * die gleiche Priorität haben??

Also wie wäre dann nach deiner Interpretation die andere Lösung?

Der Satz "In der 1. Klammer könnte auch umgeklammert werden" verstehe ich nicht.
Was könnte in der 1. Klammer noch umgeklammert werden?

Grüße
 

truesoul

Top Contributor
Hallo.

Nein.

Ein Beispiel:

Code:
int i = 15;
int j = 2;
int k = 8;

System.out.println(((i % j) * k)); // 8
System.out.println((i % (j * k))); // 15

Aber du sagtest ja schon % und * haben die gleiche Prio. Dann beachte doch mal die zweite Klammer.

Edit: Mit den Klammer setzt du Ausführungsreihenfolge.

Grüße
 

JavaAnfänger1235

Bekanntes Mitglied
a =( ((i % j) * k )<= (i * i * i ))|| b;
Das wäre dann richtig.
Ja rechnet also von links nach rechts.
Mir ist klar, dass man bei anderer Klammerung ein anderes Ergebnis erhält, aber man weis ja nicht was gerechnet werden soll. Und wenn die Prio von * und% gleich ist, sind doch egtl beide Möglichkeiten richtig?
 

Flown

Administrator
Mitarbeiter
Jetzt kannst du es noch verifizieren, indem du einfach beide Expression (mit und ohne Klammerung) in ein Testprogramm wirst und auswirfst. Wenn das Gleiche rauskommt kannst du dir sicher sein.
 

JavaAnfänger1235

Bekanntes Mitglied
Gut das werde ich machen :)
Ich hätte noch ein paar Beispiele. Vllt könnt ihr kurz drüberschauen:

2.)
b = a || i < j && j < k && k > 0;
3. )
a = j -i * k / i == j -k / i * i & b;
4.)
b = (double) i / j / k > i / j / k;

Zu 2.)
b = a ||(( i < j )&&( j < k) && (k > 0))
Zu 3.)
a = ((j -((i * k) / i ))== (j -((k / i )* i) )))& b;
Zu 4.)
b = (double)( (((i / j) / k) >(( i / j )/ k)));

Ich hoffe das stimmt so:)
Dann hätte ich es verstanden.
 

Flown

Administrator
Mitarbeiter
Ich kann dir nur raten verifiziere deine Ergebnisse in dem du sie einfach mit code testest. Denn ich glaube nicht, dass sich jemand hier hinsetzt und das nochmal durchgeht.
 

Meniskusschaden

Top Contributor
Oder bei dieser Klammerung ((i % j) * k ) kann man auch die Klammerung von (i % j) weg lassen.
Was das angeht bin ich mir hinsichtlich der Aufgabenstellung nicht ganz sicher. Soll man die Assoziativität vollständig über Klammern abbilden oder nur dort, wo sie von der links-rechts-Assoziativität abweicht? Ich bin von Ersterem ausgegangen. Im anderen Fall könnte man natürlich ein paar Klammern wieder fallen lassen.
 

JavaAnfänger1235

Bekanntes Mitglied
Hallo, ich habe ein Problem bei der Aufgabe:
Folgendes soll geklammert werden:
b = (double) i / j / k > i / j / k;

Meine Lösung:
Code:
b = (double)(((i / j) / k) > ((i / j) / k));

Das funktioniert aber in Java nicht : Konvertrierungsfehler

Warum geht dann folgendes:
Code:
b = (double)((i / j) / k) > ((i / j) / k);

Ich hätte gedacht casten hätte die höchste Prio???
 

JavaAnfänger1235

Bekanntes Mitglied
D.h wenn ich das habe: b = (double) i / j / k > i / j / k;
Und die vollständige implizite Klammerung angeben soll: Dann wäre die Lösung:
Code:
b = (double)(((i / j) / k) > ((i / j) / k));
 

Meniskusschaden

Top Contributor
Nein.
Nur zur Klärung, ob wir vielleicht bzgl. der Bedeutung von "höherer Priorität" aneinander vorbei reden: Die Multiplikation hat eine höhere Priorität als die Addition. Siehst du das auch so oder genau umgekehrt?
 

Meniskusschaden

Top Contributor
Java:
     a * b + c + d
(double) b + c + d
Die Multiplikation hat eine höhere Priorität als die Addition. Ein Typecast hat auch eine höhere Priorität als die Addition. Warum klammerst du die Ausdrücke dann so unterschiedlich?
 

Meniskusschaden

Top Contributor
Da ist eine schliessende Klammer zu viel. Wenn du die richtige entfernst, müsste es stimmen. Außerdem glaube ich nicht, dass die Aufgabenstellung Klammern um das i erwartet. Das würde ich noch entfernen.
 

Meniskusschaden

Top Contributor
Das war die falsche Klammer. Du musst die Klammern nicht grundsätzlich von links nach rechs setzen, sondern so, dass die Operationen in der richtigen Reihenfolge ausgeführt werden. Je höher die Priorität, desto weiter innen muß die Klammer sein.
 

Ähnliche Java Themen

Neue Themen


Oben