javajung对象实例化
我试图从Java Jung Graph包中构造以下内容: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 我基本上是在遵循一个原
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)