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.
 
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??
 
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
 
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
 
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?
 
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.
 
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.
 
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.
 
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.
 
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???
 
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));
 
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?
 
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?
 
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.
 
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.
 

Zurück
Oben