double精度问题

package A;

import java.util.*;
public class Question002 {
static int MAX = Integer.MAX_VALUE;

public static void main(String[] args) {
    double[][] map = new double[][] {
          {0,80,MAX,MAX,MAX,MAX,MAX,MAX},
          {80,0,20,20,MAX,MAX,MAX,MAX},
          {MAX,20,MAX,MAX,MAX,MAX,MAX,MAX},
          {MAX,20,MAX,MAX,50,MAX,MAX,MAX},
          {MAX,MAX,MAX,50,MAX,83,MAX,MAX},
          {MAX,MAX,MAX,MAX,83,0,10,MAX},
          {MAX,MAX,MAX,MAX,MAX,10,0, 11.5},
          {MAX,MAX,MAX,MAX,MAX,MAX,11.5,0},};
          
          
    prim(map, map.length);
}
 public static void prim(double[][] map, int n){
        
        char[] c = new char[]{'A','B','C','D','E','F','G','E','F'};        
        double[] lowcost = new double[n];  //到新集合的最小权 
        int[] mid= new int[n];//存取前驱结点
        List<Character> list=new ArrayList<Character>();//用来存储加入结点的顺序
        int i, j, minid ;
        double sum = 0;
        double min;
        //初始化辅助数组
        for(i=1;i<n;i++)
        {
            lowcost[i]= map[0][i];
            mid[i]=0;
        }
        list.add(c[0]);
        //一共需要加入n-1个点
        for(i=1;i<n;i++)
        {
             min=MAX;
             minid=0;
             //每次找到距离集合最近的点
             for(j=1;j<n;j++)
             {
                 if(lowcost[j]!=0&&lowcost[j]<min)
                 {
                     min=lowcost[j];
                     minid=j;
                 }
             }
             
             if(minid==0) return;
             list.add(c[minid]);
             lowcost[minid]=0;
             sum+=min;
             System.out.println(c[mid[minid]] + "到" + c[minid] + " 权值:" + min);
             //加入该点后,更新其它点到集合的距离
             for(j=1;j<n;j++)
             {
                 if(lowcost[j]!=0&&lowcost[j]>map[minid][j])
                 {
                     lowcost[j]=(int) map[minid][j];
                     mid[j]=minid;
                 }
             }
        }
        System.out.println("sum:" + 2*sum);
        
    }
    

}

img
G到E应该是11.5为什么是11.0

是因为你发的问题第56行有强制类型转换,double转int只保留整数部分。

有帮助,麻烦点个采纳,谢谢