2013-07-15 228 views
-1
for (Comment mc : relevant) { 
    for (GitItem gi : tree) { 
     bb.buildBody(gi.getHash(), mc.getBody()); 
     MutableComment mutable = commentManager.getMutableComment(mc.getId()); 
     mutable.setBody(bb.sb.toString()); 
     commentManager.update(mutable, true); 
    } 
} 

所以我做了與希望,這嵌套的foreach循環,我會從treerelevant添加第一個項目(這是GitItems的一個TreeSet),以第一個註釋(這是一個評論的大小等於tree的大小)等等(在這個例子中,我有2條評論和2條)。但是現在它所做的是,它只添加樹中的第二項到兩個評論中的每一個。我究竟做錯了什麼?嵌套foreach循環的Java

+0

似乎有點過於本地化 –

+2

你應該初始化'BB '內部循環,相同的參考文件正在更新 –

+2

當前你將嘗試用*每個* Comment來更新* every *'GitItem' ...以及Amit的點 –

回答

0

您的內部循環總是在以上遍歷所有樹中的項目,因此主體被設置爲所有評論的最後一個樹項目。如果我理解你的權利,你要正加緊同步迭代器(以僞代碼,因爲我不知道你relevanttree等是什麼:

Iterator<Comment> commentIter = relevant.iterator(); 
Iterator<GitItem> itemIter = tree.iterator(); 
while (commentIter.hasNext() && itemIter.hasNext()) { 
    Comment mc = commentIter.next(); 
    GitItem gi = itemIter.next(); 

    bb.buildBody(gi.getHash(), mc.getBody()); 
    MutableComment mutable = commentManager.getMutableComment(mc.getId()); 
    mutable.setBody(bb.sb.toString()); 
    commentManager.update(mutable, true); 
} 
+0

如果'related'和'tree'可以通過索引訪問,然後看看鄧肯瓊斯的解決方案,它基本上是同樣的東西,但使用索引,這可以更易讀 – kiheru

+0

使用它可以將樹中的第一項添加到這兩個評論中 – Schadenfreude

+0

要麼我是今天失明,還是我terator循環是正確的,並且應該正確地迭代樹。你確定代碼的其他部分是正確的嗎? – kiheru