0

ダイクストラのアルゴリズムを使用するプログラムを作成しています。インポートされたマップ上の都市を表すノードを使用しています。マップ上の 2 つの都市の間にエッジを作成できます。私の問題は、すべてのエッジに分単位の距離を表す「重み」があり、2 つのエッジ間の距離を確認する関数があることです。

Cannot cast from Stad to Edgeしかし、次の行でエラー " " が発生し続けます

Edge<Stad> selectedEdge = (Edge) fvf.visaFörbLista.getSelectedValue();

ここで、"Stad" は都市を表し、"Edge" は端を表します。

FormVisaförbindelse fvf = new FormVisaförbindelse();
for(;;) {
  try {
    int svar = showConfirmDialog(null, fvf, "Ändra Förbindelser", JOptionPane.OK_CANCEL_OPTION);
    if (svar != YES_OPTION) return;
    if (fvf.visaFörbLista.isSelectionEmpty() == true) {
      showMessageDialog(mainMethod.this, "En Förbindelse måste valjas.","Fel!", ERROR_MESSAGE);
      return;
    }

    Edge<Stad> selectedEdge = (Edge) fvf.visaFörbLista.getSelectedValue();
    FormÄndraförbindelse faf = new FormÄndraförbindelse();
    af.setförbNamn(selectedEdge.getNamn());

    for(;;) {
      try {
        int svar2 = showConfirmDialog(mainMethod.this, faf, "Ändra Förbindelse", OK_CANCEL_OPTION);
        if (svar2 != YES_OPTION) return;
        selectedEdge.setVikt(faf.getförbTid());
        List<Edge<Stad>> edges = lg.getEdgesBetween(sB, sA);
        for (Edge<Stad> edge : edges) {
          if (edge.getNamn()==selectedEdge.getNamn()) {
            edge.setVikt(faf.getförbTid());
          }
        }
        return;
      } catch(NumberFormatException e) {
        showMessageDialog(mainMethod.this, "Ogiltig inmatning.","Fel!", ERROR_MESSAGE);
      }
      // etc
4

1 に答える 1

0

もちろん、Stad から Edge に変換することはできません。考えてみてください: あなたfvf.visaFörbLista.getSelectedValue()は Stad を返します。これらは完全に異なるものであるため、スタッドをエッジに変換する方法はありません。(例: 1 つは一般的で、もう 1 つはそうではありません)。

既存の Edge に移動したい場合は、Stad に Edge のリストがあることを確認してから、適切な getter を呼び出します。例えば。:fvf.visaFörbLista.getSelectedValue().getEdgeList().getSomeEdge()

Stad から Edge にナビゲート (ゲッターを呼び出す) できない場合は、すべての Edge のリストを取得し (lg 変数に含まれているようです)、必要な Edge を選択する必要があります。

短いバージョン: 都市を取得し、それをエッジに変換しようとしていますが、都市はエッジとは根本的に異なるため、これは不可能です (たとえば、エッジは 2 つの都市を接続する必要があります)。それをエッジに変換しようとしないで、必要なエッジを取得してみてください。

ps: エッジの都市名のみが必要な場合は、都市の名前を取得するだけでキャスト (変換) する必要はまったくありません。

于 2012-09-07T09:36:50.307 に答える