继续不能在循环外使用(实际上不在外面)

时间:2012-10-31 11:53:55

标签: java loops goto 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()会导致迭代器出现故障

1 个答案:

答案 0 :(得分:5)

您标记了一个块而不是while循环。 您可以break 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; } 没有意义,因为它不是一个循环 标记你的循环如下

{{1}}

关于标记循环的研究here