Lambda-Ausdrücke

Aralgut

Mitglied
Code:
// a
d.action( (p1,p2,p3) -> { if( p1!= 0) { return p3 +1;} else{ return p3;}});
//b
d.action( (p1,p2,p3) -> { if( p2 % 2 != 0) { return p3 + p1;} else{ return p3;}});
//c
d.action( (p1,p2,p3) -> { if(p1> 0) { return 1;} else{ return p3;}});
//d
d.action( (p1,p2,p3) -> p3 = p1);

Wie hättet ihr es gemacht? Ist es richtig?
 

Anhänge

  • 20190721_202307[1].jpg
    20190721_202307[1].jpg
    321,3 KB · Aufrufe: 52
Zuletzt bearbeitet:
a ist leider falsch. Du musst p3 aufakkumulieren und nicht einfach 1 zurückgeben im Falle eines Wertes ungleich 0.
b hat dasselbe Problem, plus: Du berechnest die Summe der Elemente nicht
c ist korrekt
d ist korrekt, aber du machst eine unnötige Zuweisung an den Paramter der Lambda-Funktion. Ein simples `p1` würde reichen

Außerdem würde ich die Parameter nicht einfach nur p1, p2 und p3 nennen, sondern ihnen sprechende Namen geben, gemäß ihrer Bedeutung, die aus dem Aufrufkontext ersichtlich sind.
 
Außerdem bietet sich der ternäre Operator ?: hier gerazu an:
Java:
//a
d.action((item, index, result) -> item != 0 ? result + 1 : result);
//b
d.action((item, index, result) -> index % 2 != 0 ? result + item : result);
//c
d.action((item, index, result) -> item > 0 ? 1 : result);
//d
d.action((item, index, result) -> item);
 
Außerdem bietet sich der ternäre Operator ?: hier gerazu an:
Java:
//a
d.action((item, index, result) -> item != 0 ? result + 1 : result);
//b
d.action((item, index, result) -> index % 2 != 0 ? result + item : result);
//c
d.action((item, index, result) -> item > 0 ? 1 : result);
//d
d.action((item, index, result) -> item);

Hab es korrigiert. So sollte es stimmen oder?

?: Kenn ich leider noch nicht
 
Na dann einfach kurz lernen und dann nutzen. 🙂 Wenn du gerade in der Schule bist, dann würde ich "Kenne ich nicht" als Ausrede gelten lassen. Da es sich hier aber mit Lambdaausdrücken um ein relativ fortgeschrittenes Topic handelt, nehme ich mal an, du studierst. Und da gelten solche Ausreden nicht mehr. Eigeninitiative!

Syntax: conditionExpr "?" trueExpr ":" falseExpr

Semantik: Das Ganze ist ein Ausdruck. conditionExpr ist ein boolescher Ausdruck, liefert also `true` oder `false` zurück. Liefert er `true`, ist der Wert des Gesamtausdrucks der, welcher von dem `trueExpr` Ausdruck generiert wird. Ansonsten wird der Wert von `falseExpr` zurückgeliefert.
 
Na dann einfach kurz lernen und dann nutzen. 🙂 Wenn du gerade in der Schule bist, dann würde ich "Kenne ich nicht" als Ausrede gelten lassen. Da es sich hier aber mit Lambdaausdrücken um ein relativ fortgeschrittenes Topic handelt, nehme ich mal an, du studierst. Und da gelten solche Ausreden nicht mehr. Eigeninitiative!

Syntax: conditionExpr "?" trueExpr ":" falseExpr

Semantik: Das Ganze ist ein Ausdruck. conditionExpr ist ein boolescher Ausdruck, liefert also `true` oder `false` zurück. Liefert er `true`, ist der Wert des Gesamtausdrucks der, welcher von dem `trueExpr` Ausdruck generiert wird. Ansonsten wird der Wert von `falseExpr` zurückgeliefert.

Ja Studium 🙂 Allerdings weiss ich nicht, ob ich das in der Klausur nutzen dürfte, da wir das nicht in der Vorlesung hatten. Aber trotzdem danke!
 

Zurück
Oben