我试图在updateEdge()方法下替换edge的arraylist中的值。
在If语句中,edge.a.name和edge.b.name的值与我的source和dest值匹配,但不知何故它不会进入IF条件。
我发现的是这个,edge.a = Node @ 55f96302和a.name = Node @ 55f96302。
当我打印出节点地址时,我知道这一点,两者都不匹配。
private ArrayList<Node> nodes = new ArrayList<Node>();
private ArrayList<Edge> edges = new ArrayList<Edge>();
//add new node
public void addNode(String nodeName)
{
Node node = new Node(nodeName);
nodes.add(node);
}
//add edge
public void addEdge(String source, String dest, String weight)
{
Node a, b;
a = new Node(source);
b = new Node(dest);
Double w = Double.parseDouble(weight);
Edge edge = new Edge(a, b, w);
edges.add(edge);
}
//Check index of the node
public int indexOfNode(String name)
{
for (int i = 0; i < nodes.size(); i++)
{
if(nodes.get(i).name.equals(name))
{
return i;
}
}
return -1;
}
//update edge
public void updateEdge(String source, String dest, String weight)
{
Node a, b;
a = nodes.get(indexOfNode(source));
b = nodes.get(indexOfNode(dest));
Double w = Double.parseDouble(weight);
for(int i = 0; i < edges.size(); i++)
{
Edge edge = edges.get(i);
if(edge.a.name == a.name && edge.b.name == b.name)
{
edge.weight = w;
}
}
}
答案 0 :(得分:1)
我假设名字是string
替换if(edge.a.name == a.name && edge.b.name == b.name)
与if(edge.a.name.equals(a.name) && edge.b.name.equals(b.name))
答案 1 :(得分:1)
String
是一个对象,当您使用==
运算符比较java中的两个对象时,您比较它们的哈希码和类,因此'Node'和55f96302
。
int
或double
(例如)是原始类型,因此可以与==
运算符进行比较。他们实际上必须看到他们没有任何比较方法,因为他们不是对象(Integer
和Double
是他们的类对应物。)
为了根据字符数组值比较两个字符串,您需要使用.equals()
方法:
edge.a.name.equals(a.name)