我正在实现一种左派最小堆,它按长度存储任意单词。所以,我为Scanner编写了一个包装类,并改变了compareTo,就像这样
public class ScannerWrapper implements Comparable<String>
//a Scanner, sc and a String, current
public int compareTo(String str){
if(current.length() > str.length()) return -1;
if(current.length() > str.length()) return 1;
else return 0;
}
其中current = sc.next()并且不是\ n字符。
在这种情况下,如果我有ScannerWrapper.next()&gt; foo,其中foo是长度> gt的任意字符串。 ScannerWrapper.next();
它会使用我编写的compareTo(String),返回false,还是会做其他随机的事情?
答案 0 :(得分:0)
在多次阅读你的问题后,我想我明白你现在要问的是什么。如果你试图比较类ScannerWrapper
的两个实例和比较运算符,那么不,它不会起作用。
您不能在Java中重载运算符(您可以在C ++中),因此为了将ScannerWrapper
的实例相互比较,您将不得不调用compareTo()
方法。< / p>
此外,您的if
语句条件都相同,因此您可能需要解决此问题。
答案 1 :(得分:0)
很难理解你的问题 - 所以你可以考虑改写它。这是黑暗中的一个镜头:
public class ScannerWrapper implements Comparable<ScannerWrapper>
//your wrapper has a handle to the scanned data. Presumably it's
//initialized on construction, which is omitted here
private final String scannedData;
public String getScannedData() {
return this.scannedData;
}
public int compareTo(ScannerWrapper other) {
//if this scannedData is longer than the other, return 1
if(this.str.length() > other.getStr().length()) {
return 1;
} else if(this.scannedData.length() < other.getScannedData().length()) {
//if the other scannedData is longer return -1
return -1;
}
//if they are equal return 0
return 0;
}
}