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

标签 java loops return

有什么方法可以从 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/

相关文章:

java - 第458章 UVA解码器解释(line.charAt(i)-7)

java - Gradle错误:在IDEA中运行Android APP时

java - 是否有为 Java EE 容器定义 JDBC 数据源的标准方法?

Python - 并行化 2D 掩码数组的 python 循环?

c - 从 fgetc() 读取输入并使用 printf() 打印

python - 返回多个对象并将它们用作参数

javascript - 仅当值可用时才执行函数

java - 开源词典库

loops - 在 Q KDB+ 中使用 EACH 循环

javascript - 递归函数的返回值为 'undefined'