2016-11-13 18 views
-1

これはこれまで私のコンストラクタであり、45枚のカードのデッキでは、スーツの値が同じ場所にある45枚のカードのデッキを作る基本的なコンストラクタを書いています。 (1-9、1はエース)forループJavaポーカーゲームarraylistコンストラクタ

private ArrayList cards;カード番号は1から9までです。

public Deck() { 
    cards = new ArrayList <Card>(); 

    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,0); 
     cards.add(newCard); 
    } 
    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,1); 
     cards.add(newCard); 
    } 
    for (int valueKind = 1 ; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,2); 
     cards.add(newCard); 
    } 
    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,3); 
     cards.add(newCard); 
    } 
    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,4); 
     cards.add(newCard); 
    } 

何が間違っていますか?紛失していますか?

+4

*何間違っているか紛失していますか?*:問題の内容を推測するのではなく、私たちに教えてくれる**です。 –

+1

各スーツに9枚のカードが必要な場合は、<= 9でなければなりません。 – Eran

+1

新しい 'for'ループを使い始めましょう。 {(int i = 0; i = 4; i ++){for(int valueKind = 1; valueKind <9; valueKind ++){ cards.add(新しいカード(valueKind、i)); }} '内側のforループの –

答えて

0

値1〜9を作成する場合は、forループの条件が正しくありません。それはあなたが私に明確な質問を与えない不発ので、私はあなたにいくつかの一般的な提案をあげる<= 9

それはきれいですので、私は、あなたのコードに改善を図ることと<= 9

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by hendrawd on 11/13/16. 
*/ 
public class Deck { 
    List<Card> cards; 

    public Deck() { 
     cards = new ArrayList<>(); 
     makeCards(Card.SPADE); 
     makeCards(Card.HEART); 
     makeCards(Card.CLUB); 
     makeCards(Card.DIAMOND); 
     makeCards(Card.MADEUPNAME); 
    } 

    private void makeCards(int type) { 
     for (int valueKind = 1; valueKind <= 9; valueKind++) { 
      Card newCard = new Card(valueKind, type); 
      cards.add(newCard); 
     } 
    } 
} 

class Card { 
    static final int SPADE = 0; 
    static final int HEART = 1; 
    static final int CLUB = 2; 
    static final int DIAMOND = 3; 
    static final int MADEUPNAME = 4; 

    private int value, type; 

    Card(int value, int type) { 
     this.value = value; 
     this.type = type; 
    } 
} 
+0

* int enumパターン*について知っていますか?(名前はint enum hell *です)避けてください。 (Item 30、Effective Java) – Andrew

+0

@Andrew列挙型は整数を使用するよりも多くのデータをメモリに追加するためです – HendraWD

0

バグを修正する必要がありますコードについて

最初に、現在のforループは1から8ではなく1から9でループします。ループ条件をvalueKind < 9からvalueKind <= 9に変更する必要があります。

第二に、あなたはループのために、ネストされたを使用して、コードを短縮することができます

for(int suit = 0 ; suit < 5 ; suit++) { 
    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,suit); 
     cards.add(newCard); 
    } 
} 

もう一つは、私はあなたが定数を使用した場合、あなたのコードはより記述になると思うということです:

public static final int SPADE = 0; 
public static final int DIAMOND = 1; 
public static final int HEART = 2; 
public static final int CLUB = 3; 
public static final int MADE_UP_NAME = 4; 

//... 

for(int suit = SPADE ; suit <= MADE_UP_NAME ; suit++) { 
    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,suit); 
     cards.add(newCard); 
    } 
} 
関連する問題