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

}

这部分程序的输出是哈希码 Card@9304b1 Card@190d11 Card@a90653 Card@de6ced Card@c17164

我想放一些类似或类似的东西

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

有没有人知道为什么会这样?

顺便说一句,数组是使用预制的 .toArray() 方法从另一个类中的 ArrayList 复制的

4

2 回答 2

3

编译器无法知道这些对象是卡片,因为您Object在数组中将它们声明为 s。如果您确定它们将是卡片,请将数组声明为Card( private Card cardArray[];) 或强制转换它们((Card)ArrayElement).getRank()

如果您想再检查一次,请在转换之前使用它ArrayElement instanceof Card来验证这是一个真实的Card实例。

于 2011-05-16T04:48:47.307 回答
0

System.out.println()invokes Object.toString(),所以覆盖toString()类 Card 的方法。(顺便说一句:最好将Stringrank两者都设为Stringsuit静态):

@Override
public String toString() {
    return String.format("Card [rank= %s, suit= %s]", 
           Stringrank[rank], Stringsuit[suit]);
}
于 2011-05-16T05:05:59.967 回答