Wenn der Code ausgeführt wird, verursacht die verschachtelte Schleife gelegentliche doppelte Einträge zum System, ich habe eine Weile damit verbracht, dies zu durchschauen, kann aber immer noch nicht finden, was das verursacht, würde ich jede Hilfe schätzen?Verschachtelte Schleife erstellt doppelte Einträge beim Ausführen, Problem nicht gefunden?
for(int i = 0; i < subWorkItemElement.getChildNodes().getLength(); i++) {
Boolean test = false;
WorkItemCommon existingChild = null;
String summary = null;
if(subWorkItemElement.getChildNodes().item(i).getNodeName().equals("workitem")) {
// We know it's a work item - but is it in the existing list?
Element childWorkItem = (Element) subWorkItemElement.getChildNodes().item(i);
for(int j = 0; j < subWorkItemElement.getChildNodes().getLength(); j++) {
if(childWorkItem.getChildNodes().item(j) instanceof Element) {
if(((Element)childWorkItem.getChildNodes().item(j)).getNodeName().equals("details")) {
summary = ((Element) childWorkItem.getChildNodes().item(j)).getElementsByTagName("summary")
.item(0).getTextContent();
for(String k : userInfoHashMap.keySet()) {
summary = summary.replace("${" + k + "}", userInfoHashMap.get(k));
}
if(childHashTable.containsKey(summary)) {
test = true;
existingChild = childHashTable.get(summary);
IWorkItem workItem = existingChild.getWorkItem();
System.out.println("INFO: The task with summary \"" + summary + "\" already exists. Skipping creation.");
System.out.println("this task is work item: " + workItem.getId());
//either check the tasks in the xml for updated details and then modify the existing workitem
//or just modify the work item without checking for updates
makeChildTask(childWorkItem, existingChild, childHashTable, userInfoHashMap, workItemHashMap, rtc, false);
break;
}
}
}
}
if(!test) {
System.out.println("INFO: The task with summary " + summary + " does not currently exist. Creating.");
makeChildTask(childWorkItem, thisItem, childHashTable, userInfoHashMap, workItemHashMap, rtc, true);
} else makeFromExistingChildTask(childWorkItem, existingChild, userInfoHashMap, workItemHashMap, rtc);
}
}
Ich schlage vor, einen Haltepunkt zu setzen und den Code zu folgen. –
Es ist schwer, Ihrem Code zu folgen, ohne zu wissen, was genau er tun soll, und es ist wahrscheinlich zu viel, um es hier zu erklären. Daher würde ich vorschlagen, mit einem Debugger durch den Code zu gehen und selbst einen Blick darauf zu werfen. Außerdem scheinst du zweimal über die Kindknoten zu iterieren und erhältst mindestens O (n^2) -Komplexität. Versuchen Sie das zu beheben, und Sie könnten sogar Ihr Problem beheben (ich nehme an, dass Sie einige Kinder zweimal bearbeiten). – Thomas