2016-11-14 161 views
-2

我試圖替換updateEdge()方法下edge的arraylist中的值。Java數組列表重置值

在If語句中,edge.a.name和edge.b.name的值與我的源和目標值匹配,但不知何故它不會進入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

@KevinEsche謝謝主席先生。 –

+0

ArrayList也有'indexOf'方法 – Jerry06

回答

1

一個String是一個對象,當你使用==操作比較在Java中的兩個對象,你比較他們的哈希碼和一流的string 更換if(edge.a.name == a.name && edge.b.name == b.name) ,因此'節點'和55f96302intdouble(例如)是原始類型,因此可以與==運算符進行比較。他們實際上必須看到他們沒有任何比較的方法,因爲他們不是對象(IntegerDouble是他們的類對象)。

爲了比較基於他們的字符數組值兩個字符串,你將需要使用.equals()方法:

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

1

我認爲名字是if(edge.a.name.equals(a.name) && edge.b.name.equals(b.name))