java - continue 不能在循环外使用(实际上不在循环外)

标签 java loops goto continue

我不明白为什么 continue 在这里会导致错误

public void clear() {

    log.debug("Clearing hash");

    // wow!
    while( hash.size()>0 ) {

        for(Map.Entry<Node,Node> entry : hash.entrySet()) {

            clearingParents: {

                while( entry.getKey().ups.size() > 0 ) {

                    for(Node node : entry.getKey().ups) {

                        log.debug("Clearing {}, hash size is {}", node, hash.size());
                        if( node.sizeUps() == 0 ) {
                            node.clear();
                            continue clearingParents;
                        }
                        else {
                            log.debug("was skipped since inserted");
                        }
                    }

                    break clearingParents;
                }
            }

        }


    }

我正在使用这个方案,因为 node.clear() 导致迭代器出现故障

最佳答案

你标记一个 block 而不是 while 循环。 你可以break out of a labeled block 但不能continue labeled block continue a labeled block 没有意义,因为它不是循环 像下面这样标记你的循环

  clearingParents:  while( entry.getKey().ups.size() > 0 ) {

                        for(Node node : entry.getKey().ups) {

                            log.debug("Clearing {}, hash size is {}", node, hash.size());
                            if( node.sizeUps() == 0 ) {
                                node.clear();
                                continue clearingParents;
                            }
                            else {
                                log.debug("was skipped since inserted");
                            }
                        }

                        break clearingParents;
                    }

关于标记循环的研究 here

关于java - continue 不能在循环外使用(实际上不在循环外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13157324/

相关文章:

java - JPA + EJB 对于 Internet 交易是否太慢(或太重)?

python - 学习循环和列表

c++ - 'unused' 的初始化被 'goto label' 跳过 - 为什么我为 std::string 而不是为 int 获取它?

c++ - 从 gcc/clang (C++) 中的函数作用域中获取标签地址

java - 如何解决 java.lang.StackOverflowError

JDBC 中的 Java 类型到 Postgres ltree

java - 如何在 Cucumber for Java 中执行标记驱动的跨浏览器测试?

vba - 嵌套循环和If,不执行循环

loops - 如何将语句重复 N 次(简单循环)

C: 转到,指针转换和 "jump into scope of identifier with variably modified type"