1

我正在实现一种左派最小堆形式,它按长度存储任意单词。所以,我为 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() > foo ,其中 foo 是任意长度的字符串 > ScannerWrapper.next();
它会使用我写的 compareTo(String),返回 false,还是会做一些其他随机的事情?

4

2 回答 2

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;
    }

 }
于 2012-04-05T04:49:22.443 回答
0

多次阅读您的问题后,我想我明白您现在在问什么。如果您尝试ScannerWrapper使用比较运算符比较类的两个实例,那么不,它不会起作用。

您不能在 Java 中重载运算符(您可以在 C++ 中),因此为了比较ScannerWrapper彼此的实例,您将不得不调用该compareTo()方法。

此外,您的两个if语句条件都是相同的,因此您可能需要修复它。

于 2012-04-05T04:37:04.837 回答