在评分器的测试用例中,该用例说明了 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一定在“some code”部分,即:
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
时。
关于java - 即使返回的 ArrayList 不为空,广度优先搜索也会返回空异常指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59126665/