我正在尝试使用优秀的 JGraphT 库在 Java 中编写一个 Scrabble 程序,作为有向无环图和 Java 的练习。
所以,我的边将是字母,顶点位设置字母的大小。本质上,您逐个字母地遍历图形并检查您所在的位集,以查看如果附加到您从根节点遵循的字母弧中,哪些字母构成了一个单词。
我明白了,但让我担心的是来自 JGraphT Javadoc:
此方法使用此图的 EdgeFactory 创建新边 e。对于要添加的新边,e 不能等于图形中的任何其他边(即使图形允许边多重性)。更正式地说,该图不得包含任何边 e2 使得 e2.equals(e)。如果找到这样的 e2,则放弃新创建的边 e,该方法保持此图不变,返回 null。
我的边和节点永远不会是唯一的,除非引用不匹配。所以,我的问题是 Java 程序员会在这里做什么?
创建一个 Letter 类和一个 BitSet 类并将 equals() 保留为默认值,这将始终为 false,因为引用不匹配?但是,那么我该如何处理所有其他依赖于 .equals() 正确的方法,例如 .contains()?
创建 Edge 和 Node 类作为真正的 Letter 和 BitSet 类的薄包装器,并将始终为 false 的 .equals() 放在 Edge;Node 中,将真实的放在 Letter;Bitset 中?
public class Edge { private Letter letter; //getter and setter coming public boolean equals (Object b) { return false; } }
- 还有什么?