0

我正在创建一个使用 Dijkstra 算法的程序,我正在使用代表导入地图上的城市的节点,并且您可以在地图上的两个城市之间创建边。我的问题是每条边都有一个“权重”,它将以分钟为单位表示距离,并且我有一个功能,我想查看两条边之间的距离。

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。没有办法将 Stad 转换为 Edge,因为它们是完全不同的东西。(例如,一个是通用的,另一个不是)。

你想导航到现有的 Edge 然后确保 Stad 有一个 Edge 列表,然后调用适当的 getter。例如。:fvf.visaFörbLista.getSelectedValue().getEdgeList().getSomeEdge()

如果您无法从 Stad 导航(调用 getter)到其 Edges,那么您应该获取所有边缘的列表(您的 lg 变量似乎有它们),然后选择您需要的边缘。

简短版本:您正在获得一个城市并试图将其转换为边缘,这是不可能的,因为城市与边缘根本不同(例如,边缘应该连接两个城市)。不要尝试将其转换为边缘,尝试获取所需的边缘。

ps:如果您只需要边缘的城市名称,那么绝对不需要强制转换(转换)只需获取城市名称就可以了

于 2012-09-07T09:36:50.307 回答