2013-04-09 81 views
0

對吊索和Java很新,所以我提前道歉。但有沒有人知道爲什麼當我在根目錄下輸出 我的路徑兩次?奇怪的是,它只發生在絕對根源上。方法重複輸出

public static String generateTest(Page page, Page rootPage, String bc) { 

    Page parent = page.getParent(); 

    String bread = ""; 
    bread += (parent != null) ? "<li><a href=" + parent.getPath() + ">" + parent.getTitle() + "</a>" : ""; 
    bread += "<li>" + "<a href=" + page.getPath() + ">" + page.getTitle() + "</a></li>" + bc; 
    return (ifAtRoot(parent , rootPage)) ? breadcrumb : generateTest(parent, rootPage, bread); 

} 

public static boolean ifAtRoot(Page page, Page root) { 
    return (page == null || root.getPath() == page.getPath()); 
} 

任何幫助,不勝感激!

+0

'root.getPath()== page.getPath()'這裏有些奇怪的東西.. – Maroun 2013-04-09 20:31:15

+0

請注意,這是http://stackoverflow.com/questions/15915244/java-recursive-function-duplicating輸出AFAICS,使用相同的代碼格式不同。 – 2013-04-11 07:08:29

回答

1

首先,ifAtRoot()將返回true只有pagenull因爲你不能比較使用==對象(包括字符串)。您應該使用.equals()代替:

public static boolean ifAtRoot(Page page, Page root) { 
    return (page == null || root.getPath().equals(page.getPath())); 
} 

ifAtRoot()你的情況首先調用返回false,所以你把它稱爲第二次遞歸路過,只是已創建brend。第二次調用再次創建brend並將bc(包含先前創建的brend)附加到它。第二次致電ifAtRoot()爲您的運氣返回true。否則,您將輸入無限遞歸併以StackOverflowError結束。

+0

感謝您回覆@AlexR。雖然我有點困惑,但使用.equals而不是==似乎沒有改變任何東西。另外,如果我正在使用==而不是.equals()不會完全失敗。謝謝您的幫助! – 2013-04-09 20:50:20