これは説明するのが少し難しいので、長い質問で申し訳ありません!
文字列配列を調べてインデックス位置を返すか、配列内にノード文字列が見つからない場合は例外をスローするメソッド 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
わかりました、ここに質問があります:
ノード配列に一致する「foobar」文字列がないため、例外は indexOf(String node) で初めてスローされたに違いありません。
それが最初の .println: Exception in indexOf(String node)の説明です。
では、例外がスローされるこの最初の位置をスタックが見逃している理由はありますか?
私はスタックから次のようなものを期待していたでしょう:
Method: indexOf Line: 58
Method: addEdge Line: 169
Method: main Line: 221
ありがとうございました!