这是一个学校项目。我们应该在 HashMap 的帮助下编写一个处理图的程序。每个节点(或角落?)都有一个键(这是我们与之连接的另一个节点)和一个值(此连接的成本)。我几乎完成了,我所有的测试用例都可以工作,除了toString()
方法。它应该这样写:
{(0,1), (2,1)}
这意味着 0 和 1 已连接,2 和 1 也已连接。
/**
* Returns a string representation of this graph.
*
* @return a String representation of this graph
*/
@Override
public String toString() {
// TODO
StringBuilder sb = new StringBuilder();
sb.append("{");
for (int i = 0; i < edges.length; i++) {
for (int j = 0; j < edges[i].size(); j++) {
if (edges[i].containsKey(j)) {
if (j < edges[i].size() - 1) {
sb.append("(" + i + "," + j + "),");
} else if (j == edges[i].size() - 1) {
sb.append("(" + i + "," + j + ")");
}
}
}
if (i != edges.length - 1) {
sb.append(", ");
}
}
sb.append("}");
System.out.println(sb.toString());
return sb.toString();
}
由于我们的代码结构(我们开始使用的代码)具有 HashMap 的静态大小,如果我为 5 个节点制作一个图并且只添加其中 3 个节点,我会得到一个 NPE。当我尝试打印这些时,由于edges[i].containsKey(j))
.