2011-05-16 70 views
1

我还没有能够调用我自己的方法在一个阵列在对象数组不可访问的公共方法

这里的对象元素的问题是代码与阵列的部分代码:

public class CardRules { 
    private Object cardArray[]; 

public CardRules(Object cardArrayCopy[]){ 

    cardArray = cardArrayCopy; 
    multiples(); 
} 
public void multiples(){ 
for(Object ArrayElement: cardArray){ 
    System.out.println(ArrayElement); 
} 
} 
} 

,卡对象:

public class Card { 
    private int rank; 
    private int suit; 
    private String Stringrank[] = {"Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"}; 
    private String Stringsuit[] = {"Spades", "Hearts", "Diamonds", "Clubs"}; 
    public static int CardNo = 0; 

public Card(int cardDetails[]){ 
    rank = cardDetails[1]; 
    suit = cardDetails[0]; 
    CardNo++; 
} 
public String getCard(){ 
    return ("Card: " + Stringrank[rank] + " Of " + Stringsuit[suit]); 

} 
    public int getRank(){ 
     return rank; 
    } 
    public int getSuit(){ 
     return suit; 
    } 

}

输出对于这部分该方案是哈希码, 卡@ 9304b1 卡@ 190d11 卡@ a90653 卡@ de6ced 卡@ c17164

我想提出一些相同或类似

System.out.println(ArrayElement.getRank()); 

有没有人有什么想法为什么发生这种情况?

顺便说一句阵列被从另一个类中一个ArrayList使用预制.toArray()方法

回答

3

编译器不能知道这些对象是卡,因为你声明为Object在数组中复制。如果您确定它们是卡片,请将该阵列声明为Cardprivate Card cardArray[];)或将它们投射到((Card)ArrayElement).getRank()

如果您想再次查看,请使用ArrayElement instanceof Card验证这是铸造前的真实Card实例。

+0

如果他可以访问其他类,其中'ArrayList'被转换为一个数组,他也可以把它返回的数组通过将数组传递给'toArray'方法'Card'类型。这样他就可以避免在单个数组元素上进行显式强制转换。例如'Card [] cardArray =(Card [])list.toArray(new Card [array.size()])' – 2011-05-16 04:55:26

0

System.out.println()调用Object.toString(),所以覆盖类卡的toString()方法。 (顺便说一句:这是更好地使StringrankStringsuit静态):

@Override 
public String toString() { 
    return String.format("Card [rank= %s, suit= %s]", 
      Stringrank[rank], Stringsuit[suit]); 
} 
+1

更适合将它们声明为枚举。卡牌等级和西装不太可能会很快改变。 – 2011-05-16 05:26:17

+0

@Urs:是的,同意。 – 2011-05-16 05:28:35