2012-11-28 26 views
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教練告訴我們的課程創建一個函數,該函數將確定哪個值更大,如果前者較大則輸出1,如果相等則輸出0,如果前者較小則輸出-1。 this.getClass()最初是一個十六進制類,用於將十六進制值轉換爲_numDec。但是,當我嘗試使用this.getClass()時出現錯誤。有人可以幫忙嗎?getClass()不工作?

回答

0

明確寫出確切的類名。

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

順便說一句,如果a不是Hexadecimal對象,然後你的方法是否會返回一個0。它應該返回非零值。

+0

John Kugelman,我正在努力使這項工作適用於所有類別的不同基地。所以這應該適用於二進制和十六進制,但我不想寫出兩次,這就是爲什麼我問是否有方法讓我使用.getClass() – user1844067

+0

@ user1844067做'二進制'和「十六進制」有一個共同的基類?如果是這樣,請將compareTo方法放在那裏並使用該類的名稱。 –

+0

不,但他們都共享_numDec整數。我的老師說我們正在假設這兩種類型具有相同的類,因此我想在第一個對象上使用this.getClass(),以在第二個對象上使用this.getClass()來代替您建議我放入的十六進制數。 – user1844067

0

您沒有問題,因爲您撥打getClass()無法正常工作,您遇到問題,因爲您使用的是不正確的轉換語法。正確的語法是以下形式:

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

<type>有望成爲一個實際的Java類型(primitive或對象)。有效的Java基本類型是(int,float,long,double,char,boolean ...)。有效的對象類型由它們的完全限定名稱指定,如果類型已導入,則使用簡單名稱。例如(String,Serializable,Object,JFrame ...)。

在代碼中,這條線:

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

不能編譯,因爲您指定的鑄造是this.getClass(),這是一個動態的表現,而不是有效的類型。

有幾種方式來實現自己的真正的目標,這是太確定提供的對象是一個類型,你可以比較當前的對象,然後進行比較。這裏有一個這樣的方式:

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

請注意,我已經用訪問器方法取代了直接屬性訪問的使用。