gpt4 book ai didi

java - 有什么办法可以从循环中返回一个值并从我离开的地方继续吗?

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

有什么方法可以从 loop 返回一个值并从我离开的地方继续吗?

在下面的代码片段中,我想返回 currVm 的当前值。但是我做不到。

在片段的最内层循环中:

while(c <= currVm) {
allocatedVm(currVm);
c++;
}

一个名为allocatedVm 的函数被调用。我想返回 currVm 的值并从我离开的地方重新开始。有什么出路吗?

@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); // RETURN currVm
c++;
}
count++;
size--;
}
}
}

最佳答案

最好的方法可能是编写一个返回 Iterable<Integer> 的方法。 .这在 Java 中不像在支持生成器函数的语言(例如 C# 和 Python)中那么容易,但它仍然可行。如果代码很短,您可以使用一对(嵌套的)匿名内部类:

public Iterable<Integer> foo() {
return new Iterable<Integer>() {
@Override public Iterator<Integer> iterator() {
return new Iterator<Integer>() {
// Implement hasNext, next and remove here
};
}
};
}

不过,在您的情况下,为了简单起见,我很想将它分成一个单独的非匿名类。

总之,使用的意义Iterable那是Iterator吗? 自然而然地 有状态——这基本上就是它的目的。所以它非常适合您的要求。

另一种更简单的方法是一次返回所有 元素,并让调用者按需执行分配。显然,如果可能有大量元素,这种方法效果不佳,但会更容易理解。

关于java - 有什么办法可以从循环中返回一个值并从我离开的地方继续吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18545462/

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