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()を呼び出すので、 Card クラスObject.toString()のメソッドを上書きします。toString()(ところで:StringrankStringsuit両方を静的にする方が良いです):

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