我正在研究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,我认为是否需要创建最终数组。