javajung对象实例化

javajung对象实例化,java,instantiation,jung,Java,Instantiation,Jung,我试图从Java Jung Graph包中构造以下内容: EdmondsKarpMaxFlow alg=新EdmondsKarpMaxFlow(g、n2、n5、电容变压器、边流图、边流系数); 我不知道为什么会出错,下面是来自NetBeans的错误消息: 原因:无法通过方法调用转换将实际参数org.apache.commons.collections15.Transformer转换为org.apache.commons.collections15.Transformer 我基本上是在遵循一个原

我试图从Java Jung Graph包中构造以下内容:

EdmondsKarpMaxFlow alg=新EdmondsKarpMaxFlow(g、n2、n5、电容变压器、边流图、边流系数);
我不知道为什么会出错,下面是来自NetBeans的错误消息:
原因:无法通过方法调用转换将实际参数org.apache.commons.collections15.Transformer转换为org.apache.commons.collections15.Transformer

我基本上是在遵循一个原则

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);
        }
   };
公共图形测试()
{
g=新的DirectedSparMultigraph();
//创建一些MyNode对象以用作顶点
MyNode n1=新的MyNode(1);MyNode n2=新的MyNode(2);MyNode n3=新的MyNode(3);
MyNode n4=新的MyNode(4);MyNode n5=新的MyNode(5);
//将一些有向边以及顶点添加到图形中
g、 addEdge(newmylink(2.0,48),n1,n2,EdgeType.DIRECTED);//此方法
g、 附录(新MyLink(2.0,48),n2,n3,EdgeType.定向);
g、 addEdge(新MyLink(3.0192)、n3、n5、EdgeType.DIRECTED);
g、 addEdge(新的MyLink(2.0,48),n5,n4,EdgeType.DIRECTED);//或者我们可以使用
g、 addEdge(newmylink(2.0,48),n4,n2);//在有向图中
g、 addEdge(新的MyLink(2.0,48),n3,n1);//第一个节点是源节点
g、 addEdge(新MyLink(10.0,48),n2,n5);//第二个是目标
EdmondsKarpMaxFlow alg=新EdmondsKarpMaxFlow(g、n2、n5、电容变压器、边流图、边流系数);
}
公共类MyNode
{
private int id;//良好的编码实践会将其作为私有
公共MyNode(int-id)
{
this.id=id;
}
公共字符串toString()
{//调试总是一个好主意
return“v”+id;//JUNG2很好地利用了这些。
}        
}
公共类MyLink
{
双容量;//应该是私有的
双重重量;//应该是私人的,以便进行良好的实践
int-id;
int edgeCount=0;
公共MyLink(双重量、双容量)
{
this.id=edgeCount++;
重量=重量;
这个。容量=容量;
} 
公共字符串toString()
{//总是适合调试
返回“E”+id;
}
}
变压器CaptTransformer=新变压器()
//信息:给出一条边的容量,在这里表示为“链接”
{
@凌驾
公共双转换(MyLink链接)
{
返回链路容量;
}
};
Map edgeFlowMap=新HashMap();
Factory flowEdgeFactory=新工厂()
{
@凌驾
公共MyLink创建()
{
返回新的MyLink(1.0,1.0);
}
};

如果还有什么可以帮忙的,请告诉我!谢谢你的帮助

它确切地告诉您该构造函数的

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)
公共EdmondsKarpMaxFlow(DirectedGraph DirectedGraph, V来源, V水槽, org.apache.commons.collections15.Transformer edgeCapacityTransformer, 地图边流地图, org.apache.commons.collections15.Factory edgeFactory) 当需要时,您的
转换器
(需要定义它内部的
transform()
方法以返回一个
数字)

这可能是在API中的某个时候更改的,并且您使用的教程已经过时。API现在很可能正在对您将返回的
Number
对象调用
doubleValue()

您的
edgeFlowMap
似乎也是如此

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)