我遇到的问题是无法在数组的对象元素中调用自己的方法
以下是带有数组的代码部分的代码:
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());
有没有人对为什么会这样做有任何想法?
btw使用premade .toArray()方法从另一个类的ArrayList复制数组
答案 0 :(得分:3)
编译器无法知道这些对象是卡,因为您在数组中将它们声明为Object
。如果您确定它们是卡片,请将数组声明为Card
(private Card cardArray[];
)或投射它们((Card)ArrayElement).getRank()
。
如果您想再次查看,请在投射前使用ArrayElement instanceof Card
验证这是真实的Card
实例。
答案 1 :(得分:0)
System.out.println()
调用Object.toString()
,因此会覆盖类卡的toString()
方法。 (顺便说一下:最好让Stringrank
和Stringsuit
都是静态的):
@Override
public String toString() {
return String.format("Card [rank= %s, suit= %s]",
Stringrank[rank], Stringsuit[suit]);
}