Java arraylist替换值

时间:2016-11-14 08:07:52

标签: java arraylist

我试图在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;
        }
    }       
}

2 个答案:

答案 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'和55f96302intdouble(例如)是原始类型,因此可以与==运算符进行比较。他们实际上必须看到他们没有任何比较方法,因为他们不是对象(IntegerDouble是他们的类对应物。)

为了根据字符数组值比较两个字符串,您需要使用.equals()方法:

edge.a.name.equals(a.name)