我有点坚持这个计划。截至目前,我有一个图形的Edge对象。此边缘对象采用权重和两个Vertex对象。我为Vertex对象创建了一个类,以及Edge对象的类:
顶点:
public class Vertex {
private final Key key;
private Vertex predecessor;
private Integer rank;
public Vertex( String value )
{
this.key = new Key( value );
this.predecessor = null;
this.rank = null;
}
/**
* Return the key of the vertex.
* @return key of vertex
*/
public Key get_key()
{
return this.key;
}
/**
* Set the predecessor of the vertex.
* @param predecessor parent of the node
*/
public void set_predecessor( Vertex predecessor )
{
this.predecessor = predecessor;
}
/**
* Get the predecessor of the vertex.
* @return vertex object which is the predecessor of the given node
*/
public Vertex get_predecessor()
{
return this.predecessor;
}
/**
* Set the rank of the vertex.
* @param rank integer representing the rank of the vertex
*/
public void set_rank( Integer rank )
{
this.rank = rank;
}
/**
* Get the rank of the vertex.
* @return rank of the vertex
*/
public Integer get_rank()
{
return this.rank;
}
}
Vertex接受一个Key对象,它只是一个字符串和一个数字。
边:
public class Edge {
private static int weight;
private static Vertex A;
private static Vertex B;
public Edge( Vertex A, Vertex B, int weight )
{
Edge.A = A;
Edge.B = B;
Edge.weight = weight;
}
public int get_weight()
{
return Edge.weight;
}
public Vertex get_vertex_1()
{
return Edge.A;
}
public Vertex get_vertex_2()
{
return Edge.B;
}
}
当我尝试声明一个Edge对象时,它工作得很好。但是,当我创建第二个时,它会覆盖"第一个对象。
Edge AE = new Edge( new Vertex( "A" ), new Vertex( "E" ), 5 );
当我调用方法来打印键的值(在这种情况下,A或E)时,它可以正常工作。但是,当我这样做时:
Edge AE = new Edge( new Vertex( "A" ), new Vertex( "E" ), 5 );
Edge CD = new Edge( new Vertex( "C" ), new Vertex( "D" ), 3 );
CD基本上覆盖了AE。所以,当我试图得到" A"从AE,我得到C.当我试图得到E时,我得到D。
我已经被困在这个程序上一段时间(其中有各种不同的问题),但对于我的生活,我无法弄清楚它为什么这样做。任何人都可以指出我的错误吗?
答案 0 :(得分:1)
因为您将字段定义为static
。静态字段属于类而不属于对象。为了使对象拥有自己的字段,不应使用static关键字。创建新的Edge对象时,使用新值覆盖这些静态字段。
private static int weight;
private static Vertex A;
private static Vertex B;
更改如下。
private int weight;
private Vertex A;
private Vertex B;