2017-04-04 5 views
-1

// **以下のコードは、カード、デッキ、スーツ、ランクの2つのクラスと2つの列挙に分かれています。カードのデッキfor forループとtoStringメソッドの混乱を伴うJavaプロジェクト

私は指示に尋ねたように、ループおよびtoStringメソッドのために絡み合う上の混乱を抱えている:

は、アレイ内のすべてのカードを印刷するforループを別のものを使用して、デッキクラスにtoString()メソッドを作成します。各カードでtoString()メソッドを呼び出すことでこのメソッドは、CardオブジェクトのtoString()を呼び出すだけで、カードにランクとスーツを印刷するように「質問」します。この方法のどこにいてもランクやスーツへの参照はありません。 CardのtoString()メソッドで作業を行いましょう(Delegation)。

public class Card { 
    public static void main(String[] args) { 

     Card myCard = new Card(); 
     System.out.println(myCard.toString()); 
     System.out.println(new Card(Rank.KING, Suit.CLUBS)); 
    } 

    public Rank rank; 

    public Suit suit; 

    public Rank getRank() { 
     return rank; 
    } 

    private void setRank(Rank rank) { 
     this.rank = rank; 
    } 

    public Suit getSuit() { 
     return suit; 
    } 

    private void setSuit(Suit suit) { 
     this.suit = suit; 
    } 

    // Constructor assigning attributes to rank and suit 
    public Card(Rank rank, Suit suit) { 
     setRank(rank); 
     setSuit(suit); 
    } 

    public Card() { 
     this(Rank.ACE, Suit.SPADES); 
    } 

    @Override 
    public String toString() { 
     // TODO Auto-generated method stub 
     String result= rank.toString() + " of " + suit.toString(); 

     return result; } 

} 

public enum Suit { 
    NONE, CLUBS, HEARTS, SPADES, DIAMONDS 
} 

public enum Rank { 
    JOKER, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, 
    KING, ACE 
} 

public class Deck { 
    public void main(String[] args) { 
     int[] DeckArray = new int[54]; 
     int count = 2; 

     System.out.println(count); 

     for (count = 0; count <= 54; count++) 
     { 
      System.out.println(DeckArray); 

     } 

    } 

    public Card cards[]; 

    public void DeckOfCards() { 
     this.cards = new Card[52]; 
     Card myCard = new Card(); 

     for (int i = 0; i < 0; i++) { 
      Card card = new Card(Rank.ACE, Suit.CLUBS); 

      if (Rank.JOKER != null) { 
      System.out.println("JOKER"); 
     } else { 
      System.out.println(myCard); 

     } 
    } 
for (int i = 0; i < 52; i++) { 
    String Deck = Arrays.toString(DeckArray) 


     } 
    } 
} 
+0

FOR-ように注意してください: '数<= 54'とき'のSystem.out.println(DeckArray [回数])Deck'は、例外が発生します 'で;' 'count = 54'で呼び出されます。 Btwあなたは 'System.out.println(DeckArray);を' System.out.println(DeckArray [count]);で置き換えなければなりません。コードを書式化してください。 –

+0

どういうことですか?あなたはあなたの混乱についてより具体的になりますか?また、これはあなたのコードですか? "if(Rank.JOKER)"に続くものはありません – sjgp

+0

あなたの質問は、特にコードを読むことができないので、正しく書式設定してください。 –

答えて

1

私はあなたのためにあなたの宿題をしないように、私は、これはPsudoコードで答えてみましょう:)

運のベスト
class Deck { 
    ... 
    public String toString() { 
     for every item in this.cards { 
      currentItem.toString() // prints 
     } 
    } 
} 

!一度それを掛けると、プログラミングは本当に楽しいことができます。

+0

偉大な答えですが、私は各印刷項目の間に何かを使用します。スペースまたはセミコロン。また、toString()は無効ではありません。 – Sedrick

+0

良いキャッチセドリック。修正した元のメッセージを編集しました。 – designatevoid

0

元のコードは、forループ終了条件を定義する方法を超えるいくつかの混乱を示しているので、あなたの代わりに、このイディオムを使用することを好むことがあります。

for (Card c : cards) { 
    // do your work here 
} 

あなたも、Javaの8ストリームAPIを使用することができます、この場合には不必要に複雑に感じているものの:

Arrays.asList(cards).stream().forEach(c -> System.out.println(c.toString())); 
関連する問題