gpt4 book ai didi

java - 我必须从多次调用的函数中返回一个值,但我无法做到这一点

转载 作者:行者123 更新时间:2023-11-30 11:29:09 26 4
gpt4 key购买 nike

我卡住了。

下面的函数应该返回 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com