compareTo和使用扫描仪的字符串

时间:2012-04-05 04:18:08

标签: java string java.util.scanner comparable

我正在实现一种左派最小堆,它按长度存储任意单词。所以,我为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,还是会做其他随机的事情?

2 个答案:

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

 }