Java为每个循环或for循环执行while循环

时间:2013-04-08 20:45:37

标签: java sling

我对Java很新,并试图找出如何转换下面的代码 to for循环或for循环。

do {
    testPages.push(testParentPage);
    if(homePage != null && testParentPage.getPath().equals(homePage.getPath())){
        isParent = true;
        break;
    }
} while((testParentPage = testParentPage.getParent()) != null); 

非常感谢任何帮助!谢谢!

4 个答案:

答案 0 :(得分:5)

它可以在这样的for循环中重写:

for (; testParentPage != null; testParentPage = testParentPage.getParent()) {
    testPages.push(testParentPage);
    if(homePage != null && testParentPage.getPath().equals(homePage.getPath())){
        isParent = true;
        break;
    }
}

我想我必须承认,我不知道它是否有任何好处。

答案 1 :(得分:4)

尝试

for(; testParentPage != null; testParentpage = testParentPage.getParent()) {
    ...
}

for循环结构是(变量初始化;布尔测试;赋值) - 通常变量是整数,测试是<或>,并且赋值是一个增量,但不一定是这种情况。

答案 2 :(得分:0)

实际上do .. while循环在这种情况下看起来非常合适。如果你有一个“普通”集合或某些东西给你一个迭代器,forforeach循环将是首选工具。但是在这种情况下(使用for循环向上导航树结构)恕我直言会让人感到困惑。

除此之外,{/ 1}}循环的条件总是在执行循环体之前进行评估。因为你需要至少执行一次身体,这会使事情变得更加困难和/或复杂。

编辑:当然,在循环开始时执行空值检查实际上是有意义的,因为你在循环体中调用for上的方法。

答案 3 :(得分:0)

Re:for-each循环。

每个循环的A迭代遍历集合或数组(see docs),因此您将无法(立即)将do-while循环转换为for-each循环,因为您正在迭代自定义 - 定义的层次结构。

如果您有一个List<TestPageParent>(或者类型名称是什么),那就可以了。 TestPageParent[]也是如此。或Collection<TestPageParent>