当他要求
时,我不知道我的教授的意思包含令牌的String。我这样做了:
String input;
String[] token=input.split(" ");
int compareTo(BSTNode) - 将此对象与参数对象进行比较。首先,比较对象的String成员;如果它们不相等,则返回适当的值。如果String 0members相等,则比较int成员并返回适当的值。
我的compareTo方法看起来像这样。
public int compareTO(BSTNode token){
if(this.token.equals(token.BSTNode.getToken())){
if(this.count==count.BSTNode.getCount()){
return 1;
}
else{
return 0;
}
return 1;
}
else{
return 0;
}
}
我不确定我在做什么是对的
答案 0 :(得分:0)
嗯,部分是的。
compareTo通常用于按顺序排列,所以你不想只返回0或1.如果你有myObject.compareTo(anotherObject),那么约定如果匹配则返回0,如果myObject在anotherOBject之前发生,则为负数;如果myObject在anotherObject之后发生,则为正数。
因此,如果我们的对象是字符串,那么:
"A".compareTo("A") = 0,
"A".compareTo("B") = -1,
"B".compareTo("A") = 1.
他们可能不是-1和+1,他们可能是任何消极或积极的。这只是举例!
您使用"令牌"走在正确的轨道上。一个令牌只是一种说出你感兴趣的部分的奇特方式。所以在一个句子中,一个"令牌"可能是一个词。在一个等式中,它可能是一个术语。
最后,如果你使用字符串,这应该很容易实现 - 他们已经实现了compareTo!你可以打电话给现成的。
这是一整堆要演示的代码。在这种情况下,类BSTNode并没有真正向原始字符串添加任何内容,但它有助于提出这个想法。请注意,大写字母位于小写字母之前,因为这是字符串的默认顺序。另外,请参阅第二个compareTo方法。虽然返回的数字不同,但它与第一个一样有效。最后,请注意我实现了Comparable接口。这样可以轻松进行排序。
public class BSTNode implements Comparable<BSTNode> {
public String node;
public BSTNode(String node) {
this.node = node;
}
public static void main(String[] args) {
String string = "This is the original string is it not?";
// Tokenize and make nodes
String[] tokens = string.split(" ");
BSTNode[] nodes = new BSTNode[tokens.length];
for (int i = 0; i < nodes.length; i++) {
nodes[i] = new BSTNode(tokens[i]);
}
// Original
for (int i = 0; i < nodes.length; i++) {
System.out.println("Unsorted " + i + ": " + nodes[i]);
}
System.out.println();
// Compare two nodes
System.out.println("Node[0] compared to Node[1] = "
+ nodes[0].compareTo(nodes[1]));
System.out.println("Node[1] compared to Node[0] = "
+ nodes[1].compareTo(nodes[0]));
System.out.println("Node[1] compared to Node[5] = "
+ nodes[1].compareTo(nodes[5]));
System.out.println();
// Sort (only possible thanks to compareTo)
Arrays.sort(nodes);
for (int i = 0; i < nodes.length; i++) {
System.out.println("Sorted " + i + ": " + nodes[i]);
}
}
@Override
public int compareTo(BSTNode t) {
return this.node.compareTo(t.node);
}
public int compareTo2(BSTNode t) {
String a = node;
String b = t.node;
if (a.compareTo(b) < 0) {
return -1;
} else if (a.compareTo(b) == 0) {
return 0;
} else {
return 1;
}
}
@Override
public String toString() {
return "BSTNode{" + "node=" + node + '}';
}
}