Lambda-Funktion bei Binärbäumen

Hallo zusammen,

kann mir jemand sagen wie diese Aufgaben funktionieren?

Vielen Dank!
 

Anhänge

  • Bildschirmfoto 2016-10-08 um 14.13.03.JPG
    Bildschirmfoto 2016-10-08 um 14.13.03.JPG
    308 KB · Aufrufe: 35
  • Bildschirmfoto 2016-10-08 um 14.13.11.JPG
    Bildschirmfoto 2016-10-08 um 14.13.11.JPG
    89,7 KB · Aufrufe: 28

DrZoidberg

Top Contributor
Bei Aufgabe 2 berechnest du die Lösung mit "myTree.each((a,v) -> Math.max(a,v))". Und bei 3 mit "myTree.each((a,v) -> a+v)/myTree.count()".
 

looparda

Top Contributor
Sorry aber die Lösungen sind falsch.
Wenn sich aus der Aufgabenstellung folgende Implementierung für each ableiten lässt:
Java:
public double each(TreeWalkerInterface treeWalkerInterface) {
    double aggregated = 0;
    for (Double value : wrappedTree) {
        aggregated += treeWalkerInterface.apply(aggregated, value);
    }
    return aggregated;
}
kommt man für das Maximum mit Math.max allein nicht aus, da sich a ja erhöht!
Folgender Lambda Ausdruck ist zielführend:
Java:
(a, v) -> Math.max(a,v) - a
Hiermit lässt man aggregated, also die Summe, nie höher als die im jeweiligen Durchlauf höhere der beiden Zahlen a und v werden.
Die Lösung für 3. kannst du im Code nachvollziehen.
Wie folgt getestet:
Java:
package treelambda;

import java.util.TreeSet;

public class Tree {

    private TreeSet<Double> wrappedTree;

    public Tree() {
        wrappedTree = new TreeSet<>();
    }

    public void add(double value) {
        wrappedTree.add(value);
    }

    public int count() {
        return wrappedTree.size();
    }

    public double each(TreeWalkerInterface treeWalkerInterface) {
        double aggregated = 0;
        for (Double value : wrappedTree) {
            aggregated += treeWalkerInterface.apply(aggregated, value);
        }
        return aggregated;
    }

    public TreeSet<Double> getWrappedTree() {
        return wrappedTree;
    }
}
package treelambda;

@FunctionalInterface
public interface TreeWalkerInterface {
    double apply(double aggrgated, double nodeValue);
}
package treelambda;

import org.junit.Before;
import org.junit.Test;

import java.util.DoubleSummaryStatistics;
import java.util.stream.Collectors;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class TreeTest {

    private Tree tree;
    private DoubleSummaryStatistics stats;

    @Before
    public void setUp() {
        this.tree = new Tree();
        tree.add(13);
        tree.add(10.5);
        tree.add(8);
        tree.add(11);
        stats = tree.getWrappedTree().stream().collect(Collectors.summarizingDouble(Double::doubleValue));
    }

    @Test
    public void testMax() {
        double max = tree.each((a, v) -> Math.max(a,v) - a);
        assertThat(max, is(stats.getMax()));
    }

    @Test
    public void testAvg() {
        double avg = tree.each((a, v) -> v) / tree.count();
        assertThat(avg, is(stats.getAverage()));
    }

}
Für 1. natürlich einfach add aufrufen.
 
Zuletzt bearbeitet:

looparda

Top Contributor
Dort steht aber der "aggregierte Wert" mit der Randbedingung für den ersten Aufruf. Aggregiert bedeutet zusammengefasst, was für Zahlen im einfachsten Fall aufsummieren impliziert.
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
"aggregierte Wert" ist erstmal nur eine Bezeichnung für den Wert. Das kann vieles Bedeuten. In diesem Fall ist mit aggregieren gemeint, dass aus allen Werten des Baumes, durch die Anwendung des Lamda Ausdruckes, ein einzelner Wert berechnet wird.
 

looparda

Top Contributor
Ok ich verstehe deinen Ansatz. Aber aggregiert deutet für mich stark auf summieren hin, weswegen ich die each Methode anders als du angenommen habe und wir somit auf 2 Lösungsansätze durch Unklarheiten in der Aufgabenstellung kommen.

//Edit: wobei der Satz "Bei allen folgenden Aufrufen den zuletzt durch apply zurückgegebenen Wert." doch summieren widerspricht.
Deine Lösungen kann ich mit neuer Ansicht der each Methode bestätigen.
 

looparda

Top Contributor
wieso ziehst du dann bei der 2. -a ab?
Das habe ich doch bereits beschrieben. Weiter: a wird ja für jeden Aufruf mitgegeben und dient somit als "Puffer" um Informationen zwischen 2 Aufrufen zu teilen. In dem Fall ist die Information die zum Aufruf bekannte höchste Zahl. Mit Math.max ermitte ich die höhere der Beiden Zahlen und gebe die Differenz zur alten höheren Zahl zurück. Die die zurückgegebene Differenz des Lambdas wird ja in aggregated aufsummiert. Also summiere ich entweder 0 auf oder v-a auf. Ich kann es leider schlecht erklären. Einfach im Debugger mal nachvollziehen.
und wie würde dann die Lösung für die 3 aussehen?
siehe
Die Lösung für 3. kannst du im Code nachvollziehen.
Hast du die Antwort überhaupt gelesen? :confused:
 
Zuletzt bearbeitet:

looparda

Top Contributor
Mir wird bei der 3. nicht klar was der Ausdruck "(a, v)-> v)/ tree.count() "macht?
Du musst beachten, dass ich die Aufgabe anders als DrZoidberg verstanden habe und vermutlich falsch: Ich ging ja davon aus, dass aggregated die Summe sein soll.
Somit gebe ich bloß den nodeValue v zurück, der in der each aufsummiert wird. each gibt mit dieser Lamda also die Summe zurück! Dann teile ich durch die Anzahl der nodes, denn so bildet man nun mal den Durchschnitt.

Falls das Klausuraufgaben sind musst du dich unbedingt damit beschäftigen und es verstehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
C Interface Parameter und Rückgabewerte in Lambda Ausdrücken verwenden Java Basics - Anfänger-Themen 16
X Collections.sort als Lambda Java Basics - Anfänger-Themen 14
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
I Lambda map -> Children bekommen Java Basics - Anfänger-Themen 1
L Java reduce() + Lambda Java Basics - Anfänger-Themen 10
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
G Java Lambda Ausdrücke Java Basics - Anfänger-Themen 19
M Java 8 Lambda Expression Java Basics - Anfänger-Themen 1
A Lambda Java Basics - Anfänger-Themen 9
A Lambda-Ausdrücke Java Basics - Anfänger-Themen 6
B Summe von Property innerhalb einer Liste via Lambda Java Basics - Anfänger-Themen 1
G Lambda Ausdrücke Java Basics - Anfänger-Themen 2
O Lambda Ausdruck mit Wildcard einschränken Java Basics - Anfänger-Themen 5
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
B Interface Java Lambda Ausdruck. Java Basics - Anfänger-Themen 11
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
M Lambda - Ausdruck zu Beschreibung erstellen Java Basics - Anfänger-Themen 7
M Lambda - Ausdrücke verstehen Java Basics - Anfänger-Themen 2
K Lambda-Expression Java Basics - Anfänger-Themen 4
K Lambda - kompliziertes filtern Java Basics - Anfänger-Themen 5
N Lambda Ausdrücke richtig schreiben Java Basics - Anfänger-Themen 4
F Methoden Lambda Ausdrücke Methodensignatur Java Basics - Anfänger-Themen 6
E Hilfe bei Lambda-Ausdrücken in BlueJ Java Basics - Anfänger-Themen 1
G Lambda Ausdruck: Welche Methode ist die Richtige? Java Basics - Anfänger-Themen 1
C Lambda Ausdrücke Java Basics - Anfänger-Themen 1
TheSorm Java 8 Lambda-Ausdrücke Java Basics - Anfänger-Themen 9
M Lambda Expressions Java Basics - Anfänger-Themen 3
E Hilfe bei rekursiver Funktion Java Basics - Anfänger-Themen 3
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
R Buttons ohne Funktion Java Basics - Anfänger-Themen 2
I Generische Funktion Java Basics - Anfänger-Themen 3
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
J In main() Datei geöffnet, von anderer Funktion beschreiben Java Basics - Anfänger-Themen 3
M toDouble Funktion Java Basics - Anfänger-Themen 3
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
X Ackermannsche Funktion Java Basics - Anfänger-Themen 32
F Arrays: Mathematische Funktion Java Basics - Anfänger-Themen 19
P Dezimal zu Hexadezimalzahl Funktion Java Basics - Anfänger-Themen 5
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
M Arrays in Funktion Kopieren und Bearbeiten Java Basics - Anfänger-Themen 4
B Funktion mit mehreren Rückgabewerten aka Prozeduren? Java Basics - Anfänger-Themen 12
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
D Funktion nur 1 Rueckgabewert Java Basics - Anfänger-Themen 9
M Wie lang eine Funktion/Methode? Java Basics - Anfänger-Themen 51
N den inhalt eines array per funktion ausgeben Java Basics - Anfänger-Themen 8
R Ackermann Funktion Java Basics - Anfänger-Themen 2
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
E Contain-funktion überlisten Java Basics - Anfänger-Themen 4
J Division ohne Arithmetische Funktion Java Basics - Anfänger-Themen 2
S Funktion in Klasse auslagern Java Basics - Anfänger-Themen 4
J Problem mit Boolean bei Funktion! Java Basics - Anfänger-Themen 5
S Gibt es eine Funktion, die gewissermaßen eine Reihe von instanceOf() vereinheitlicht? Java Basics - Anfänger-Themen 19
D Nullstellen einer Funktion 3. Grades mit Horner Schema Java Basics - Anfänger-Themen 6
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
D Funktion gibt Dimension zurück Java Basics - Anfänger-Themen 11
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
B Zugriffe in einer Klasse / Funktion Java Basics - Anfänger-Themen 9
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
J Array innerhalb einer Funktion mehrfach iniatilisieren Java Basics - Anfänger-Themen 4
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
B OOP Wie benutze ich die Main Funktion richtig? Java Basics - Anfänger-Themen 10
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
E Compare-Funktion bei eigener Klasse Java Basics - Anfänger-Themen 4
S Threads run - Funktion wird nur einmal ausgeführt. Java Basics - Anfänger-Themen 8
B Anwender soll mathematische Funktion eingeben können, Einfachster Fnktionsplotter Java Basics - Anfänger-Themen 4
R If Funktion funktioniert nicht :P Java Basics - Anfänger-Themen 3
H Funktion in Hintergrund und Vordergrund ausführen Java Basics - Anfänger-Themen 11
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
S Funktion eines Stacks Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
T Klassen Funktion in einem Funktionsaufruf definieren Java Basics - Anfänger-Themen 3
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
X Eval-Funktion mit Variable Java Basics - Anfänger-Themen 2
T Screenreader Funktion Java Basics - Anfänger-Themen 2
S Wertetabelle einer Funktion f : R -> R Java Basics - Anfänger-Themen 1
P Methoden suche funktion die char wert ausgibt wenn man numerischen wert und radix angibt Java Basics - Anfänger-Themen 1
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33

Ähnliche Java Themen

Neue Themen


Oben