16

org.jgrapht.graph.DefaultEdgeDefaultEdgeのメソッドgetSource()とは保護されています。getTarget()

org.jgrapht.graph.SimpleGraphedgeSet()によって返される各エッジのソース頂点とターゲット頂点にアクセスするにはどうすればよいですか?

以下のコードは、何が起こっているかを示しています。

import java.util.Set;

import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;

public class TestEdges
{
    public static void main(String [] args)
    {
        UndirectedGraph<String, DefaultEdge> g =
            new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

        String A = "A";
        String B = "B";
        String C = "C";

        // add the vertices
        g.addVertex(A);
        g.addVertex(B);
        g.addVertex(C);

        g.addEdge(A, B);
        g.addEdge(B, C);
        g.addEdge(A, C);

        Set<DefaultEdge> edges = g.edgeSet();

        for(DefaultEdge edge : edges) {
            String v1   = edge.getSource(); // Error getSource() is protected method
            String v2   = edge.getTarget(); // Error getTarget() is protected method
        }
    }
}
4

2 に答える 2

29

JGraphTメーリングリストによると、エッジのソースとターゲットにアクセスするための「正しい」方法は、org.jgraphtのインターフェイスからこの方法を使用することgetEdgeSource(E)です。getEdgeTarget(E)Interface Graph<V,E>

コードの変更は次のようになります

for(DefaultEdge edge : edges) {
   String v1   = g.getEdgeSource(edge);
   String v2   = g.getEdgeTarget(edge);
}
于 2013-01-13T14:36:53.563 に答える
1

エッジの値を抽出しようとしたときに同様の問題が発生しました。OPの場合ではありませんが、この問題に直面している他の人には役立つ可能性があります。

グラフをインスタンス化してエッジクラスに渡したとき:

DirectedGraph graph = new SimpleDirectedGraph(DefaultEdge.class);

Netbeansは、インポートするDefaultEdge.classファイルのオプションを提供してくれましたが、間違ったファイルを選択しました。org.jgraphtの代わりにorg.jgraphライブラリを使用しました。

DefaultEdgeクラスを使用している場合は、jgraphtのクラスを使用していることを確認してください。

import org.jgrapht.graph.DefaultEdge;
于 2014-11-06T19:02:40.647 に答える