作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我卡住了。
下面的函数应该返回 currVm
, 一个整数。但是如果我做一个return
我将打破循环,下次调用此函数时,将再次开始相同的过程。
我该怎么做才能从中断的地方继续?我试着制作 static
变量,但我没有帮助我。
@Override
public int getNextAvailableVm() {
Set<String> dataCenters = confMap.keySet();
for (String dataCenter : dataCenters) {
LinkedList<DepConfAttr> list = confMap.get(dataCenter);
Collections.sort(list, new MemoryComparator());
int size = list.size() - 1;
int count = 0;
while(size >= 0) {
DepConfAttr dca = (DepConfAttr)list.get(count);
int currVm = dca.getVmCount();
int c = 0;
while(c <= currVm) {
allocatedVm(currVm);
c++;
return currVm;
}
count++;
size--;
}
}
return 0;
}
for-each
循环分配一个新的 data center
作为 confMap
的 key .我作为值获得的列表已排序。然后运行一个循环,直到它超出其大小。在这个 while loop
中, 另一个 while loop
从名为 allocatedVm
的函数运行继承类的调用。名为 currVm
的参数传递给它。
这是我需要返回的变量。我该怎么做才能返回这个变量?我必须从我离开的地方开始。我的意思是下一个调用应该看起来是下一步,无论它是什么,同时执行循环。
最佳答案
添加List<Integer>
反对您的类(class),并按如下方式更改您的方法:
private Iterator<Integer> availableVms = null;
@Override
public int getNextAvailableVm() {
if (availableVms != null) {
if (availableVms.hasNext()) {
return availableVms.next();
}
return 0;
}
List<Integer> tmp = new ArrayList<Integer>();
Set<String> dataCenters = confMap.keySet();
for (String dataCenter : dataCenters) {
LinkedList<DepConfAttr> list = confMap.get(dataCenter);
Collections.sort(list, new MemoryComparator());
int size = list.size() - 1;
int count = 0;
while(size >= 0) {
DepConfAttr dca = (DepConfAttr)list.get(count);
int currVm = dca.getVmCount();
int c = 0;
while(c <= currVm) {
allocatedVm(currVm);
c++;
tmp.add(currVm);
}
count++;
size--;
}
}
availableVms = tmp.iterator();
return availableVms.hasNext() ? availableVms.next() : 0;
}
这个想法是预先生成整个列表,并存储它的迭代器以备将来使用。在进入方法之前,您检查是否 availableVms
迭代器已经准备好了。如果它已经准备好了,如果有的话,就从它那里拿走下一个项目;否则,返回零。
如果列表还没有准备好,运行你的算法,并将结果添加到临时列表tmp
.列表准备就绪后,获取其迭代器,并将其用于后续调用。
关于java - 我必须从多次调用的函数中返回一个值,但我无法做到这一点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18554571/
我是一名优秀的程序员,十分优秀!