2017-11-13 20 views
0

私はOracleがJavaのチュートリアルでトランプ・演習を解決しようとしている:型の不一致-問題

public class CardClass { 
    public static String suit; 
    public static String rank; 
    final String[] suits = {"cloves","hearts","spades","diamonds"}; 
    final String[] ranks = {"Ace","2","3","4","5","6","7","8","9","Jack","Queen","King"}; 

    public CardClass(int suit, int rank) { 
     // TODO Auto-generated constructor stub 
     CardClass.suit = suits[suit]; 
     CardClass.rank = ranks[rank]; 
    } 

    public static void printCard() { 
     System.out.println("The card's suit is: " + suit + " and the card's rank is: " + rank); 

    } 

    public static void main(String[] args) { 
     new CardClass(1,1); 
     printCard(); 
    } 
} 

public class DeckClass{ 
    public static String[][] deck; 

    public DeckClass() { 
     // TODO Auto-generated constructor stub 
     for(int i=0; i<4;i++) { 
      for(int j=0; j<13; j++) 
      deck[i][j]= new CardClass(i,j); 
     } 
    } 

    public static void printDeck() { 
     for(String a: deck["hearts"]) { 
     System.out.println("In hearts the deck contains:"+ a); 
     } 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     new DeckClass(); 
     printDeck(); 
    } 
} 

をそして私が手次のエラー:

型の不一致は: デッキにCardClassからStringに変換することはできません[i] [j]は新しいCardClass(i、j)を=。

型の不一致は:行うにはどのような:(デッキ[ "ハート"]文字列){

ため でintに文字列から変換することができませんか?私はこれでかなり初心者で、2次元配列のカードをプリントアウトする特定のスーツを選ぶことしか考えられないので、心を選んだ。

+1

エラーが一目瞭然です。 DeckClassのデッキがString [] []タイプの場合、そこにあるCardClassへの参照を設定することはできません。別の問題は、デッキは配列なので、deck ["hearts"]のように使うことはできません。デッキ[2]のようなインデックスを使用する必要があります。デック[2] [2] 。 – zbyszekt

+0

'public static String [] [] deck'を' public static CardClass [] [] deck'に変えてみてください。 – Sedrick

+0

しかし、デッキの種類をCardClassに変更した後は、printDeckメソッドでもう印刷できません。私もそれをキャストすることはできません。ご回答有難うございます。 – Afrim124

答えて

0

DeckClassのコンストラクタで、CardClassクラスのインスタンスをStringの配列に割り当てようとしています。そのコードが機能するためには、デッキをCardClassの配列に変更する必要があります。

printDeckメソッドでは、プリミティブ配列のインデックスにStringを使用してアクセスすることはできません。 int値を使用する必要があります。たとえば、私が使用するであろう心(あなたのコンストラクタが働いていると仮定)の3にアクセスします。

final CardClass fourOfHearts = deck[1][3];

このdocの配列アクセスセクションをチェックアウト: https://docs.oracle.com/javase/specs/jls/se8/html/jls-10.html

+0

ありがとう!デッキのタイプをCardClassに変更した後でなければ、printDeckメソッドを使用して印刷することはできません。文字列が必要で、キャストできないからです。んで、どうする? – Afrim124

+0

最後のコメントをMr. Mendozaに見せてください。 – Afrim124