我正在研究cloudsim项目。因此,我编写以下代码,该代码首先计算均值,然后按升序排列ArrayList的值。所以我想通过Vm类型的ref vmList返回此代码。谁能帮我 ?我该怎么办?或此代码有什么问题?

public static <T extends Vm> ArrayList<Double> sortByFFDMean(List<T> vmList) {

    double size = 0;
    double sum = 0;

    ArrayList<Double> vmSize = new ArrayList<Double>();
    ArrayList<Double> vms = new ArrayList<Double>();

    for(Vm v: vmList)
    {
        double cpu = v.getTotalUtilizationOfCpuMips(CloudSim.clock());
        double ram = v.getTotalUtilizationOfRam(CloudSim.clock());
        double bw = v.getTotalUtilizationOfBW(CloudSim.clock());

        size = (cpu + ram + bw / 3);

        vmSize.add(size);

        sum += size;

    }

    double mean = sum/vmList.size();
    for(int i=0; i<vmSize.size(); i++)
    {
        if(vmSize.get(i) > mean)
        {
            vms.add(vmSize.get(i));
        }
        else
        {
            vms.add(vmSize.get(i));
        }
    }

    Collections.sort(vms, Collections.reverseOrder());
    return vms;
}

最佳答案

我不明白您的代码。首先获取类型实例Vm的列表,计算“大小”并添加另一个列表。然后,您将获得所有值的总和并获得平均值。之后,您会看到所有尺寸元素,但“ if”将不起作用。看看,您验证了什么,但将值添加到vms列表中并不重要。基本上,您将有两个等于列表:“ vmSize”和“ vms”。如果要在“均值”上方和下方的值之间划一条线,则需要重新编写代码或执行以下操作:

ArrayList<Double> vmsBelowMean = new ArrayList<Double>();
ArrayList<Double> vmsAboveMean = new ArrayList<Double>();


for(int i=0; i<vmSize.size(); i++)
{
    if(vmSize.get(i) > mean)
    {
        vmsAboveMean.add(vmSize.get(i));
    }
    else
    {
        vmsBelowMean.add(vmSize.get(i));
    }
}


然后将这两个数组放在一起。

关于return,我认为是否需要创建最终数组。

10-06 09:42