这个有点难以解释,很抱歉这个问题太长了!
我有方法 indexOf(String node) ,它在字符串数组中查找并返回索引位置,如果在数组中找不到节点字符串,则抛出异常。
该方法用于 addEdge(String node1, String node2) 调用 addEdge(int index1, int index2)。
protected String[] nodes;
protected boolean[][] adjacencyMatrix;
protected int indexOf(String node) throws GraphException {
for (int i = 0; i < nodes.length; i++) {
if (node.equals(nodes[i])) {
return i;
}
}
System.out.println("Exception in indexOf(String node)");
throw new GraphException();
}
public void addEdge(int index1, int index2) throws GraphException {
if ((index1 != index2) && (index1 < this.nodes.length) && (index2 < this.nodes.length)) {
this.adjacencyMatrix[index1][index2] = true;
this.adjacencyMatrix[index2][index1] = true;
} else {
System.out.println("Exception in addEdge(int index1, int index2)");
throw new GraphException();
}
}
public void addEdge(String node1, String node2) throws GraphException {
try {
this.addEdge(this.indexOf(node1), this.indexOf(node2));
} catch (GraphException e) {
System.out.println("Exception in addEdge(String node1, String node2)");
throw new GraphException();
}
}
出于测试目的,我使用 myArray = {"foo", "foo2", "bar"} 实现了一个数组。现在,当我尝试引发异常时,例如:
try {
addEdge("foo", "foobar");
} catch (GraphException e) {
for (StackTraceElement st : e.getStackTrace()) {
System.out.println("Method: " + st.getMethodName() + " Line: " + st.getLineNumber());
}
}
控制台输出是:
Exception in indexOf(String node)
Exception in addEdge(String node1, String node2)
Method: addEdge Line: 169
Method: main Line: 221
好的,问题来了:
显然,异常必须是第一次在 indexOf(String node) 中引发,因为节点数组中没有匹配的“foobar”字符串。
这解释了第一个 .println: Exception in indexOf(String node)。
那么,堆栈是否有原因错过了抛出异常的第一个位置?
我本来希望从堆栈中得到这样的东西:
Method: indexOf Line: 58
Method: addEdge Line: 169
Method: main Line: 221
谢谢!