2010-11-28 15 views
0

増分されたクラスメンバ変数 'nNodeIndex'をarraylistに追加しようとしましたが、ループの最後にすべての値が最後の反復増分と同じですか?メンバ変数と問題増分されたクラスメンバ変数をループ内のarraylistに追加

クラス:メインクラス内

import java.util.ArrayList; 

public class Graph { 

    private static ArrayList<GraphNode> Nodes = new ArrayList<GraphNode>(); 
    private static ArrayList<GraphEdge> Edges = new ArrayList<GraphEdge>(); 

    private static boolean diGraph; 
    private static int nNodeIndex; 

    private boolean uniqueEdge(int from, int to) 
    { 
     for(int i=0; i< Edges.size(); i++){ 
      if(Edges.get(i).from() == from && Edges.get(i).to() == to) 
       return false; 
     } 
     return true; 
    } 

    private void removeInvalidEdges(int nodeIndex) 
    { 
     for(int i=0; i<Edges.size(); i++) 
     { 
      if(Edges.get(i).from() == nodeIndex) 
       Edges.remove(i); 
      if(Edges.get(i).to() == nodeIndex) 
       Edges.remove(i);      
     } 
    } 

    Graph(boolean directionalGraph) 
    { 
     diGraph  = directionalGraph; 
     nNodeIndex = 1; 
    } 

    public GraphNode getNode(int nodeIndex) 
    { 
     return Nodes.get(nodeIndex); 
    } 

    public int getIndexByVector(int x, int y) 
    { 
     for(int i=0; i<Nodes.size(); i++) 
     { 
      if(Nodes.get(i).x() == x && Nodes.get(i).y() == y) 
       return i; 
     } 
     return -1; 
    } 

    public int nextFreeNodeIndex(){ return nNodeIndex; } 

    public void addNode(GraphNode node) 
    { 
     if(Nodes.size() > 0) 
      Nodes.add(node.index()-1, node); 
     else 
      Nodes.add(node); 

     nNodeIndex++; 
    } 

    public void removeNode(int index) 
    { 
     Nodes.get(index).setIndex(-1); 

     removeInvalidEdges(index); 
    } 

    public void addEdge(GraphEdge edge) 
    { 
     if(uniqueEdge(edge.from(), edge.to())) 
      Edges.add(edge); 

     if(!diGraph) 
     { 
      if(uniqueEdge(edge.to(), edge.from())) 
       Edges.add(new GraphEdge(edge.to(), edge.from())); 
     } 
    } 

    public void removeEdge(GraphEdge edge) 
    { 
     for(int i=0; i<Edges.size(); i++) 
      if(Edges.get(i).from() == edge.from() && 
       Edges.get(i).to() == edge.to()) 
      { 
       Edges.remove(i); 
      } 
    } 

    public int totalNodes(){ return Nodes.size(); } 

    public int totalEdges(){ return Edges.size(); } 

    public int nActiveNodes() 
    { 
     int count = 0; 

     for(int i=0; i<Nodes.size(); i++) 
     { 
      if(Nodes.get(i).index() != -1) 
       count++; 
     } 

     return count; 
    } 

    public void reset() 
    { 
     nNodeIndex = 1; 
     Nodes.clear(); 
     Edges.clear(); 
    } 

} 

が使用:

for(int row = 1; row <= boardWidth; row++){ 
     for(int col = 1; col <= boardHeight; col++){ 
      graph.addNode(new GraphNode(graph.nextFreeNodeIndex(), row, col)); 
     } 
    } 

グラフNodeクラス:

public class GraphNode extends Square { 

    private static int indexNum; 

    GraphNode(int n, int x, int y) 
    { 
     super(x,y); 
     indexNum = n; 
    } 

    public int index(){ return indexNum; } 
    public void setIndex(int index){ indexNum = index; } 
} 

答えて

1

あなたは私たちにグラフノードクラスを表示する必要がありますか?私はそれによって保持されているノードのインデックス(そのコンストラクタで渡された最初のパラメータによって設定される)が静的変数かどうか疑問に思います。

+0

グラフノードクラスを追加しました。最初にコンストラクタに渡されたノードインデックスは、実際には静的変数です。 – maelstrom

+0

次に、実際にはあなたの問題です。静的であれば、すべてのGraphNodeインスタンスで同じになります。間違いなくインスタンス変数または非静的変数にする。 –

+0

GraphNodeクラスのindexNumを非静的に変更しました。これは正常に動作するようになっています... – maelstrom

関連する問題