2015-02-23 109 views
-2

如何爲int數組編寫toString()方法?說返回52卡包的字符串表示形式?如何爲面向對象編程編寫一個int數組的toString()方法?

這裏是一個例子數組作爲類的一部分:

{ 
    int[] cards = new int[52]; 

    public void Deck() 
    { 
     // Setting up array 
     String[] suits = {"SPADES", "CLUBS", "HEARTS", "DIAMONDS"}; 
     String[] ranks = {"TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", 
      "EIGHT", "NINE", "TEN", "JACK", "QUEEN", "KING", "ACE"}; 
     { 
      // Initalising array 
      for (int i = 0; i < cards.length; i++) 
      { 
       cards[i] = i; 
      } 
     } 
    } 

這在一個面向對象的方式被完成。在這種情況下,如何寫一個toString()方法來返回卡片的字符串表示,或者在這種情況下返回數組?

我當前已使用:

@Overide 
public String toString() 
{ 
    return getClass().getName() + "[cards[]= " + cards[] + "]"; 
} 

我也用了類似的toString()方法寫成:

return getClass().getName() + "[suits[]= " + suits[] + "ranks[]= " + ranks[] + "]"; 

它的同類的toString()方法我已經用於其他值,它通常起作用。雖然現在我得到這個錯誤兩個(或至少,第一個):

cannot find symbol 
symbol: Class cards //which I dont have other than the array at the top 
location: Class Pack // The class the array is currently in 

unexpected type 
required: value 
found: class 

'.class.' expected 

至於打印出來,我想,要麼格式化爲一個列表或一個網格。

+1

而不是使用字符串,我會使用'枚舉'的西裝和麪值。卡將是一個組合,這將使打印更容易。順便說一句如果你使用這種模式,你的IDE可以爲你生成'toString()'。 – 2015-02-23 11:39:24

+0

@SeanOwen在頂部看到編輯,我只想要一個標準的字符串表示形式的列表或網格。 – SIHB007 2015-02-23 11:47:48

+0

@PeterLawrey我已經在一個單獨的類中使用了套裝和排名作爲枚舉,但是它們已經被整理到了整數,而不是字符串。 – SIHB007 2015-02-23 11:48:22

回答

0

如果你想做更多的OOPish,你應該創建一個新的類Card

Card類將必須字段suitrank(類型可能是enum這裏)。
確保Card覆蓋toString(),並確保您的數組DeckCard[](和NOT int[])。

現在,您可以通過調用Arrays.toString(),這將反過來調用每個Card對象的toString(),導致你的甲板所需要的表現輕鬆實現toString()


至於你的代碼(這是後來添加的):

return getClass().getName() + "[cards[]= " + cards[] + "]"; 

不能編譯,因爲cards[]是不是值 - cards是的,但你想要的它不會讓你。 Array的toString()不會生成array, and you should use Arrays.toString(cards)的內容。

但是,我建議重新設計這個答案的頭部描述的代碼。

+0

我真的沒有時間重新設計整個代碼,但我已經插入'Arrays.toString(卡)',我不再有任何錯誤。我可能會插入一個將數組打印到toString()方法中以完成它的方法。 – SIHB007 2015-02-23 12:00:57