0
public int compareTo(Object a) {  
    int Output = 0;  
    if(this.equals(a))  
        Output = 0;  
    if(a instanceof this.getClass()) {  
        if(this._numDec > ((this.getClass())a)._numDec)   
        Output = 1;  
        if(this._numDec < ((this.getClass())a)._numDec)   
        Output = -1;  
    }  
    return Output;  
}

こんにちは。私の CS インストラクターは、2 つの値のどちらが大きいかを判断する関数を作成するようにクラスに指示しました。前者が大きい場合は 1、等しい場合は 0、前者が小さい場合は -1 を出力します。はthis.getClass()もともと、16 進数値を _numDec に変換するための 16 進数クラスでした。ただし、this.getClass() を使用しようとするとエラーが発生します。誰か助けてくれませんか?

4

2 に答える 2

0

正確なクラス名を明示的に書き出します。

if (a instanceof Hexadecimal) {  
    if (this._numDec > ((Hexadecimal) a)._numDec)   
        Output = 1;  
    if (this._numDec < ((Hexadecimal) a)._numDec)   
        Output = -1;  
}

ところで、がオブジェクトaでない場合Hexadecimal、メソッドは 0 を返します。ゼロ以外を返す必要があります。

于 2012-11-28T04:29:50.447 に答える
0

への呼び出しが機能しgetClass()ていないために問題が発生していません。間違ったキャスト構文を使用しているため、問題が発生しています。正しい構文は次の形式です。

<type> target_var = (<type>) source_var;

Where<type>は、実際の Java 型 (プリミティブまたはオブジェクト) であると予想されます。有効な Java プリミティブ型は (int、float、long、double、char、boolean ...) です。有効なオブジェクト タイプは、完全修飾名で指定されるか、タイプがインポートされた場合は単純な名前で指定されます。例 (文字列、シリアライズ可能、オブジェクト、JFrame ...)。

あなたのコードでは、この行:

if(this._numDec > ((this.getClass())a)._numDec)

キャストを に指定しているため、コンパイルされませんthis.getClass()。これは動的な式であり、有効な型ではありません。

提供されたオブジェクトが現在のオブジェクトと比較できるタイプであるかどうかを判断し、比較を実行するという実際の目標を達成するには、いくつかの方法があります。そのような方法の 1 つを次に示します。

if(a instanceof Binary)) {
    if(this.getNumDec() > ((Binary)a).getNumDec())   
        Output = 1;  
    else 
        Output = -1;  
} else if(a instanceof Hexadecimal) {
    if(this.getNumDec() > ((Hexadecimal)a).getNumDec())
        Output = 1;
    else
        Output = -1;
}

プロパティへの直接アクセスの使用をアクセサー メソッドに置き換えたことに注意してください。

于 2012-11-28T05:20:26.307 に答える