2016-11-20 15 views
-1

基本的に私はカードのゲームを作っていて、私はデッキの一番上からcertainAmountのカードを外してから、certainAmountをサイズの配列として返すようにしていますcertainAmountなぜ私の論理が間違っているのか分かりませんJava ArrayとArraylistのカードゲーム

private ArrayList<Card> cards; 

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

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

} 

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


public Card getCardAt(int position) { 
    Card gottenCard = cards.get(position); 
    return gottenCard; 
} 


public int getNumCards() { 
    int sizeOfArrayList = cards.size(); 
    return sizeOfArrayList; 
} 

//remove certain amount (numCards) of cards from top of arraylist 
public Card[] deal(int numCards) { 
    Card[] newArray = new Card[numCards]; 

    //assigning removed card to new array positions 
    for (int newArrayPosition=0; j<newArrayPosition;newArrayPosition++) { 
     newArray[j] = cards.remove((cards.size()-1)); 
    for (int newArrayPosition=0; j<newArrayPosition;newArrayPosition++) { 
     newArray[j] = cards.remove((cards.size()-1)); 
    } 
    return newArray; 
} 
+0

ロジックが間違っていることをどのように知っていますか? –

+0

私たちの提出サーバー内で取得していますエラーは言う:にjava.lang.AssertionError:<0>をしかしだった:予想<4> @cainiaofei – emmynaki

+3

を、私はあなたがより良い現在のコード@emmynakiより詳細なコード –

答えて

0

私はあなたの質問から理解したことは、私はあなたを助けることができると信じています。私はこの状況でArrayListの使用が不可欠であると思います。 ArrayListを使用すると、nullPointerExceptionsを心配する必要なく、値を簡単に削除したり追加することができます。したがって、私の答えは、カードを表す整数を含むArrayListを使用しています。あなたのシナリオでは、ArrayListの汎用パラメータで 'Card'を 'Integer'に置き換えてください。私のコード:

import java.util.ArrayList; 

public class Answers { 

    public static void main(String[] args) { 
     Answers main = new Answers(); 
     // Original Deck 
     ArrayList<Integer> cards = new ArrayList<Integer>(); 

     // Add to original deck 
     cards.add(1); 
     cards.add(2); 
     cards.add(3); 
     cards.add(4); 
     cards.add(5); 

     System.out.println("Removed Cards Deck: " + main.deal(3, cards)); 
      // Removed Cards Deck: [1, 2, 3] 

      System.out.println("Original Deck: " + cards); 
      // Original Deck: [-1, -1, -1, 4, 5] 
    } 

    public ArrayList<Integer> deal(int numCards, ArrayList<Integer> deckOfCards) { 
      // Deck that will contain the removed cards 
      ArrayList<Integer> newCardsArray = new ArrayList<Integer>(); 

      for (int i = 0; i < numCards; i++) { 
       newCardsArray.add(deckOfCards.get(i)); 
        // Add to remove cards deck 

       deckOfCards.set(i, -1); 
        // Set taken cards in original deck to '-1' 
      } 
      return newCardsArray; 
    } 

} 

これは役に立ちます。

+0

私はそれがこのようにずっと簡単だろうと知っています!しかし、私たちのプロジェクトの指示は、私たちがdealメソッドの配列リストを使わないように作られています - 私はhaha – emmynaki