Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
4个月前关闭。
在针对平地机的测试案例中,案例说明了正在接收
以下是我的广度优先搜索代码。我知道这可能是一团糟,但它在所有其他情况下都有效。您是否在此摘要中看到任何可能是我未通过该测试的原因?
我的
因此,NPE必须位于“某些代码”部分,即:
唯一可以导致NPE的行是:
然后仅当
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
4个月前关闭。
在针对平地机的测试案例中,案例说明了正在接收
getMinLadder("aa", "aa")
的NullPointerException
呼叫。每当我使用该方法调用运行客户端时,我都会收到正确的答案。我对调用该方法将如何导致空指针异常感到困惑。以下是我的广度优先搜索代码。我知道这可能是一团糟,但它在所有其他情况下都有效。您是否在此摘要中看到任何可能是我未通过该测试的原因?
我的
isWord()
方法和getHammingDistance()
方法不包括在内。他们正常工作。 isWord()
只是扫描单词的哈希集,以查看它是否包含我要查找的字符串。 getHammingDistance()
也非常简单。 public List<String> getMinLadder(String start, String end) {
start.toLowerCase();
end.toLowerCase();
neighbors.clear();
minLadder = new ArrayList<String>();
HashSet<String> visited = new HashSet<String>();
Queue<Node<String>> queue = new ArrayDeque<Node<String>>();
Node<String> root = new Node<String>(start);
queue.add(root);
Node<String> currentNode;
if (start.equals(end)) {
minLadder.add(start);
return minLadder;
}
if (getHammingDistance(start, end) == -1) {
return minLadder;
}
if (isWord(start) && isWord(end)) {
while (!queue.isEmpty()) {
currentNode = queue.remove();
neighbors.addAll(this.getNeighbors(currentNode.getValue()));
queue.removeAll(visited);
for (String obj : neighbors) {
if (!obj.equals(end)) {
visited.add(obj);
Node<String> node = new Node<String>(obj);
queue.add(node);
node.next = currentNode;
}
else {
Node<String> lastNode = new Node<String>(obj);
queue.add(lastNode);
lastNode.next = currentNode;
queue.remove();
Node<String> pointer = new Node<String>(null);
pointer.next = lastNode;
while (pointer.next != null) {
minLadder.add((String) pointer.next.getValue());
pointer.next = pointer.next.next;
}
java.util.Collections.reverse(minLadder);
return minLadder;
}
}
}
}
return minLadder;
}
最佳答案
对代码的分析表明,当两个参数相等时,流程结束:
public List<String> getMinLadder(String start, String end) {
// some code
if (start.equals(end)) {
minLadder.add(start);
return minLadder;
}
因此,NPE必须位于“某些代码”部分,即:
start.toLowerCase();
end.toLowerCase();
neighbors.clear();
minLadder = new ArrayList<String>();
HashSet<String> visited = new HashSet<String>();
Queue<Node<String>> queue = new ArrayDeque<Node<String>>();
Node<String> root = new Node<String>(start);
queue.add(root);
唯一可以导致NPE的行是:
neighbors.clear();
然后仅当
neighbors
为null
时。