2017-10-10 1 views
0

私は、カードオブジェクト(別のクラスで定義されている)を含むスタック内にStackListを持つArrayListを使用して、Tableと呼ばれるクラスにカードの「パイル」を作成しようとしています。ArrayList内にあるスタックまたはリンクされたリストにアクセスするにはどうすればよいですか?

私はそうのようにそれを初期化:

private MyArrayList<MyStack<Card>> piles;  

public Table() 
{ 
    MyStack<Card> piles = new MyStack<>(); 
} 

を私の問題は、私はArrayListの内部でスタックにしてから物事を追加する方法を見つけ出すことができないということです。私の初期設定は間違っていますか?もしそうなら、どうすれば修正できますか?

注:MyArrayListとMyStackは、ArrayListとStackのわずかに異なるバージョンです。

+0

「重複した」質問は、「リストのリスト」について話しました。しかし、本質的に、それはあなたがリストのリスト、スタックのリスト、またはどんなコレクションのリストを話しても問題ではありません。 – GhostCat

答えて

0

変数名は少し混乱します。

// private MyArrayList<MyStack<Card>> piles; 
private final ArrayList<Stack<Card>> allPiles; 

public Table() { 
    // MyStack<Card> piles = new MyStack<>(); 
    allPiles = new ArrayList<>(); 
} 

が、あなたはこのような何かを行うことができます:

public void addCardToPile(Card card, int pileIndex) { 
    while (allPiles.size() < pileIndex) { 
     allPiles.add(new Stack<Card>()); 
    } 

    allPiles.get(pileIndex).push(card); 
} 


public Card getTopCardFromPile(int pileIndex) { 
    while (allPiles.size() < pileIndex) { 
     allPiles.add(new Stack<Card>()); 
    } 

    if (allPiles.get(pileIndex).isEmpty()) { 
     return null; 
    } 

    return allPiles.get(pileIndex).pop(); 
} 

をしかしArrayListが、ここで最も適切であるかどうかは明確ではありません考えてみましょう。 Map<Integer, Stack<Card>> allPilesとし、pileIndexの代わりにpileNumberのようなものを使用してください。またはMap<String, Stack<Card>> allPilespileName

+0

残念ながら、リストされた変数名を変更することは、クラスのプロジェクト割り当てであるため、いいえです。メソッドやそのようなものを追加すること(つまり、別のものを試してはいけないコーディングクラス)もそうですが、私がプログラムを稼働させるかどうかをあなたが言って、見てください。 –

+0

それから教師にあなたに*ごみ*を教えていることを教えてください。ローカル変数* piles *にはフィールド*パイル* ...をシャドーイングしたり、異なるタイプを使用したりする意味が全くありません。名前は重要です。彼らは何かを意味する。あなたのインストラクターが本当にそのような細部を主張するならば... – GhostCat

+0

あなたのソリューションは私を助けてくれました!私は最終的にカードゲームの仕事をすることができますので、ありがとうございます。 –

0

ここを繰り返してスタックし、カードをスタックに押し込みます。

for (MyStack cards: piles) { 
    cards.push(new Card); 
} 
関連する問題