Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我会得到这个;不能从Stad向Edge浇铸“;错误?_Java_Oop_Casting_Edges - Fatal编程技术网

Java 为什么我会得到这个;不能从Stad向Edge浇铸“;错误?

Java 为什么我会得到这个;不能从Stad向Edge浇铸“;错误?,java,oop,casting,edges,Java,Oop,Casting,Edges,我正在创建一个使用Dijkstra算法的程序,我在导入的地图上使用代表城市的节点,你可以在地图上的两个城市之间创建边。我的问题是每一条边都有一个“权重”,它以分钟表示距离,我有一个函数,我想看到两条边之间的距离 但我一直收到错误“无法从Stad转换到Edge”” Edge<Stad> selectedEdge = (Edge) fvf.visaFörbLista.getSelectedValue(); Edge selectedEdge=(Edge)fvf.visaFörbList

我正在创建一个使用Dijkstra算法的程序,我在导入的地图上使用代表城市的节点,你可以在地图上的两个城市之间创建边。我的问题是每一条边都有一个“权重”,它以分钟表示距离,我有一个函数,我想看到两条边之间的距离

但我一直收到错误“
无法从Stad转换到Edge”

Edge<Stad> selectedEdge = (Edge) fvf.visaFörbLista.getSelectedValue();
Edge selectedEdge=(Edge)fvf.visaFörbLista.getSelectedValue();
其中“Stad”代表城市,“边缘”代表边缘

FormVisaförbindelse fvf=new FormVisaförbindelse();
对于(;;){
试一试{
int svar=showConfirmDialog(null,fvf,“ndra Förbindelser”,JOptionPane.OK\u CANCEL\u选项);
如果(svar!=是选项)返回;
if(fvf.visaFörbLista.isSelectionEmpty()==true){
showMessageDialog(main方法,这是“En Förbindelse måste valjas.”,“Fel!”,错误消息);
返回;
}
Edge selectedEdge=(Edge)fvf.visaFörbLista.getSelectedValue();
FormÄndraförbindelse faf=新的FormÄndraförbindelse();
af.setförbNamn(selectedge.getNamn());
对于(;;){
试一试{
int svar2=showConfirmDialog(main方法.this,faf,“indra Förbindelse”,确定取消选项);
如果(svar2!=是选项)返回;
选择edge.setVikt(faf.getförbTid());
列表边=lg.getEdgesBetween(sB,sA);
用于(边:边){
如果(edge.getNamn()==selectedEdge.getNamn()){
setVikt(faf.getförbTid());
}
}
返回;
}捕获(数字格式){
showMessageDialog(mainMethod.this,“Ogiltig inmatning.”,“Fel!”,错误消息);
}
//等

当然你不能从Stad转换到Edge。想想看:你的
fvf.visaFörbLista.getSelectedValue()
返回一个Stad。无法将Stad转换到Edge,因为它们是完全不同的东西。(例如,一个是泛型,另一个不是)

您希望导航到现有的边缘,然后确保Stad有一个边缘列表,然后调用相应的getter。 例如:
fvf.visaFörbLista.getSelectedValue().getEdgeList().getSomeEdge()

如果您无法从Stad导航(调用getter)到其边缘,那么您应该获得所有边缘的列表(似乎您的lg变量具有这些边缘),并选择所需的边缘

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


ps:如果您只需要边缘的城市名称,则完全不需要强制转换(convert)只需获取城市名称,您应该很好

错误发生在哪一行?这是编译还是运行时错误?如果是运行时错误,完整堆栈跟踪是什么?我猜
fvf.visaFörbLista.getSelectedValue();
返回一个
Stad
?我在(Edge)fvf.visaFörbLista.getSelectedValue()上得到错误;(不能从Stad转换到Edge)那么
Edge selectedEdge=(Edge)fvf.visaFörbLista.getSelectedValue()呢;
?请在发布代码之前格式化代码
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