1

私は、任意の単語を長さで格納する左派最小ヒープの形式を実装しています。そこで、スキャナーのラッパー クラスを作成し、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

あなたの質問を何度か読んだ後、あなたが今何を求めているのか理解できたと思います。クラスの 2 つのインスタンスをScannerWrapper比較演算子で比較しようとしている場合、いいえ、うまくいきません。

Java では演算子をオーバーロードできません (C++ では可能です)。そのため、 のインスタンスScannerWrapperを互いに比較するには、compareTo()メソッドを呼び出す必要があります。

また、両方のifステートメント条件が同じであるため、修正することをお勧めします。

于 2012-04-05T04:37:04.837 に答える
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 に答える