0

我正在做 cloudsim 项目。所以我写了下面的代码,这段代码首先计算平均值,然后按升序排列 ArrayList 的值。所以我想通过引用 vmList 在 Vm 类型中返回此代码。谁能帮我 ?我该怎么办?或者这段代码有什么问题?

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;
}
4

1 回答 1

0

我不明白你的代码。首先获取类型实例 Vm 的列表,计算“大小”并添加到另一个列表中。然后你得到所有值的总和并得到平均值。之后,您会看到所有尺寸元素,但您的“如果”将不起作用。看看它,你验证,但值是什么并不重要,你添加到 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));
    }
}

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

关于返回,我想如果你需要创建你的最终数组来看看这个。

于 2020-06-08T20:43:43.330 回答