Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Nachdem ich mich ja erst über die Multiplikation innerhalb einer Liste bewandert habe, habe ich nun das Problem, das ich aufgrund dessen das mein Wert generisch gewählt ist, die Multiplikationszeile nicht funktioniert.
Hat da jemand ne Ahnung wie ich das verändern muss, damit das optimal funktioniert.
Node class:
Java:
public class LinkedList<T> implements Iterator<T>, Serializable {
private class Node<T> {
Node<T> next;
T value;
Node(){
}
Node(T value, Node<T> next){
this.value = value;
this.next = next;
}
}
Am einfachsten sollte T noch von irgendwas ableiten, was eine Methode zur Verfügung stellt, welche die Daten als [c]double[/c] zurückgeben. Dazu kannst du T entweder von Number (Java Platform SE 6) ([c]doubleValue()[/c]) oder von einem eigenen Interface ableiten lassen. Der Codeausschnitt könnte dann z.B. [c]LinkedList<T extends Number> implements Iterator<T extends Number>[/c] und [c]Node<T extends Number>[/c] lauten.
Multiplikation funktioniert nicht mit Object. Ich würde versuchen die Funktion in fold irgendwie herauszulösen (abstrakt gestalten etc.), da fold denke ich generell eine Funktion auf die Elemente ausführen soll. Diese Funktion muss dann speziell implementiert werden.
was wäre wenn ich mir irgendwie eine zusätzlichen Typ erschaffe zB V kann ich diesen, dann irgendwie von bestimmten Typen machen, also mehreren beispielsweise long double int?
Der Typ kann nicht primitiv sein, also muss er vom Typen Integer, Float, Double, ... sein. Und genau diese Typen erben vom von mir verlinkten Typen Number.
Ich würde für den fall eine statische Method einführen welche für Listen des specifischen Typs spezifische Operationen ausführt. Der Rest der LinkedList kann gleich bleiben, nur muss die Klasse Node noch auf static gesetzt werden.
Ich würde eine generische fold-Funktion schreiben, und ein passendes Operator-Objekt mitliefern:
Java:
public interface BinaryOp<T>{
T eval(T a, T b);
}
//für allgemeine Number-Listen:
public class NumberMultiplicator extends BinaryOp<Number> {
public Number eval(Number a, Number b) { return a.doubleValue() * b.doubleValue(); }
}
//oder besser das, wenn du schon eine Double-Liste hast:
public class DoubleMultiplicator extends BinaryOp<Double> {
public Double eval(Double a, Double b) { return a * b; }
}
public static <T> T fold(LinkedList<? extends T> list, Op<T> op) {
Node<T> ptr = list.head;
T result = null;
while (ptr != null) {
result = (result == null) ? ptr.value : op.eval(result, ptr.value);
ptr = ptr.next;
}
return result;
}
...
LinkedList<Double> list = ...
Double product = fold(list, new DoubleMultiplicator());