我正在做cloudsim项目。所以我写了下面的代码,这个代码首先计算平均值,然后对ArrayList的值进行升序。所以我希望通过在Vm类型中引用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;
}发布于 2020-06-09 04:43:43
我不懂你的代码。首先获取一个类型实例Vm的列表,计算“大小”并添加到另一个列表中。然后你得到所有值的总和,并得到平均值。之后,您将看到所有的size元素,但您的"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,我想如果你需要创建你的最终数组,看看这个。
https://stackoverflow.com/questions/62268439
复制相似问题