Java 使用扫描仪比较和字符串

Java 使用扫描仪比较和字符串,java,string,java.util.scanner,comparable,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

我正在实现一种形式的左撇子最小堆,它按长度存储任意单词。因此,我为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;
}
公共类ScannerWrapper实现可比较
//扫描仪,sc和字符串,当前
公共整数比较(字符串str){
if(current.length()>str.length())返回-1;
if(current.length()>str.length())返回1;
否则返回0;
}
其中current=sc.next(),不是\n字符

在本例中,如果我有ScannerWrapper.next()>foo,其中foo是长度为>ScannerWrapper.next()的任意字符串

它会使用我写的compareTo(字符串),返回false,还是会做一些其他随机的事情?

读了几遍你的问题后,我想我明白你现在在问什么了。如果您试图用比较运算符比较类
ScannerWrapper
的两个实例,那么不,它将不起作用

在Java中不能重载运算符(在C++中可以重载),因此为了相互比较
ScannerWrapper
的实例,必须调用
compareTo()
方法


同样,你的<代码>如果语句条件是相同的,所以你可能需要修正它。

很难理解你的问题-所以你可以考虑改写它。这是一张在黑暗中拍摄的照片:

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

 }
公共类ScannerWrapper实现可比较
//包装器具有扫描数据的句柄。大概是
//在构造时初始化,此处省略
私有最终字符串扫描数据;
公共字符串getScannedData(){
返回此.scannedData;
}
公共int比较(扫描仪和其他){
//如果此scannedData比另一个更长,则返回1
if(this.str.length()>other.getStr().length()){
返回1;
}else if(this.scannedData.length()
如果我的解释看起来有点混乱,很抱歉。让我试着澄清一下-`String n=ScannerWrapper.next()和n.length()>foo.length(),我真的不能很好地理解你的问题,但是你的
如果
语句条件相同…你是不是想使用
它与代码的格式无关,假设它是正确的,因为我从未使用过代码的精确副本。第二个if语句应该是我从来没有使用我的代码的确切的文本在这里,我试图使它们尽可能的一般。在这种情况下,像if语句这样的错误是可能的,感谢您的注意。那么,我应该比较ScannerWrapper类的两个实例?假设我有一个字符串长度N,它是流中的下一个单词,在我的最小堆中有一个字符串长度IScannerWrapper
和一个
String
或两个
ScannerWrapper
s,这取决于您以及如何编写重载的
compareTo()
方法。您可以使用
compareTo()
确定当前值在最小堆中的位置,但我猜您的堆将存储
String
s或
ScannerWrapper
s,因此我可能希望两个相同类型的对象相互比较。最小堆将存储字符串,所以,也许我应该编写一个类来包装一个字符串,并有一个单独的扫描器?