次の形式のファイルを読み取って、ノード (整数値) とエッジ (ソース、宛先、重み) を含むグラフを作成しています
1 51 1
1 72 2
1 77 1
等
Set<Node> nodes = new HashSet<Node>(); //a set of the nodes of a graph
ArrayList<Node> nodeList = new ArrayList<Node>();
ArrayList<Edge> edgeList = new ArrayList<Edge>();
...
Node node1=new Node(Integer.parseInt(temprelation[0]));
Node node2=new Node(Integer.parseInt(temprelation[1]));
nodes.add(node1);
nodes.add(node2);
Edge edge = new Edge(node1, node2, Integer.parseInt(temprelation[2]));
edgeList.add(edge);
}
クラス Node には「number of neighbors」フィールドもあります。ソースまたは宛先のいずれかが表示されるたびに、すべてのエッジを調べて、近隣の数を増やしたいと思いました。
for (int edge=0; edge<graph.getEdges().size(); edge++){
graph.getEdges().get(edge).getSource().neighborUp();
graph.getEdges().get(edge).getDestination().neighborUp();
}
不思議なことに、オブジェクトは同じように見えますが (equals で確認しました)、カウンターが上がりません。たとえば、1 の場合、最初のエッジで 1 回上昇しますが、2 番目のエッジが関係しているときにインクリメントしようとしても上昇しません。インクリメントする前に 2 番目のエッジを考慮すると、最初のエッジに既にある最初のノードのネイバーの数をインクリメントしましたが、ネイバーの数が 0 であることを示しています。したがって、インクリメントの前後にカウンターの出力を行った場合、他のオブジェクトが関係しているかのように、常に 0 1 0 1 を取得します。