2012-12-29 65 views
0

我試圖構建在Java榮格圖形包以下:EdmondsKarp Object的Java榮格對象實例化

EdmondsKarpMaxFlow<MyNode, MyLink> alg = new EdmondsKarpMaxFlow<MyNode, MyLink>(g, n2, n5, capTransformer, edgeFlowMap, flowEdgeFactory); 

我不知道爲什麼我有一個錯誤,這裏是從NetBeans中的錯誤消息:
reason: actual argument org.apache.commons.collections15.Transformer<selfsimilarity.MyLink,java.lang.Double> cannot be converted to org.apache.commons.collections15.Transformer<selfsimilarity.MyLink,java.lang.Number> by method invocation conversion

我實質上是遵循tutorial

EdmondsKarpMaxFlow實例化位於構造函數的底部。在構造函數中,我將所有參數的代碼提供給EdmondsKarp對象。這些參數是圖形,源節點和匯節點,容量轉換器,地圖和邊緣工廠。

public GraphAlgTests() 
    { 
     g = new DirectedSparseMultigraph<MyNode, MyLink>(); 
     // Create some MyNode objects to use as vertices 
     MyNode n1 = new MyNode(1); MyNode n2 = new MyNode(2); MyNode n3 = new MyNode(3); 
     MyNode n4 = new MyNode(4); MyNode n5 = new MyNode(5); 
     // Add some directed edges along with the vertices to the graph 
     g.addEdge(new MyLink(2.0, 48),n1, n2, EdgeType.DIRECTED); // This method 
     g.addEdge(new MyLink(2.0, 48),n2, n3, EdgeType.DIRECTED); 
     g.addEdge(new MyLink(3.0, 192), n3, n5, EdgeType.DIRECTED); 
     g.addEdge(new MyLink(2.0, 48), n5, n4, EdgeType.DIRECTED); // or we can use 
     g.addEdge(new MyLink(2.0, 48), n4, n2); // In a directed graph the 
     g.addEdge(new MyLink(2.0, 48), n3, n1); // first node is the source 
     g.addEdge(new MyLink(10.0, 48), n2, n5);// and the second the destination 

     EdmondsKarpMaxFlow<MyNode, MyLink> alg = new EdmondsKarpMaxFlow<MyNode, MyLink>(g, n2, n5, capTransformer, edgeFlowMap, flowEdgeFactory); 
    } 

public class MyNode 
{ 
    private int id; // good coding practice would have this as private 
    public MyNode(int id) 
    { 
     this.id = id; 
    } 
    public String toString() 
    {      // Always a good idea for debuging 
     return "v"+id;  // JUNG2 makes good use of these. 
    }   
} 


public class MyLink 
{ 
    double capacity; // should be private 
    double weight; // should be private for good practice 
    int id; 
    int edgeCount = 0; 

    public MyLink(double weight, double capacity) 
    { 
     this.id = edgeCount++; 
     this.weight = weight; 
     this.capacity = capacity; 
    } 
    public String toString() 
    { // Always good for debugging 
     return "E"+id; 
    } 
} 

    Transformer<MyLink, Double> capTransformer = new Transformer<MyLink, Double>() 
    //INFO: Gives the capacity of an edge, denoted here as a "link" 
    { 
     @Override 
     public Double transform(MyLink link) 
     { 
      return link.capacity; 
     } 
    }; 

    Map<MyLink, Double> edgeFlowMap = new HashMap<MyLink, Double>(); 
    Factory<MyLink> flowEdgeFactory = new Factory<MyLink>() 
    { 
     @Override 
     public MyLink create() 
     { 
      return new MyLink(1.0, 1.0); 
     } 
    }; 

如果還有什麼可以幫助的,請告訴我!感謝所有的幫助!

回答

2

它告訴你到底是什麼Javadocs爲構造告訴你:

public EdmondsKarpMaxFlow(DirectedGraph<V,E> directedGraph, 
          V source, 
          V sink, 
          org.apache.commons.collections15.Transformer<E,Number> edgeCapacityTransformer, 
          Map<E,Number> edgeFlowMap, 
          org.apache.commons.collections15.Factory<E> edgeFactory) 

Transformer<MyLink, Double>當它需要<MyLink, Number>(和需要你裏面transform()方法被定義爲返回Number

這可能在API的某個時候發生了變化,您使用的教程已過時。現在,API很可能會在您要返回的Number對象上調用doubleValue()

您的edgeFlowMap也會出現同樣的情況。