2016-03-27 10 views
0

私は最近(スーパークラスである)Deckクラスを作成しました。クラスが機能するかどうかを調べるためのテスターメソッドを作成しようとしています。ここ は私のデッキクラスです:プログラムのサブクラスで何が問題になっていますか?

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

/** 
* The Deck class represents a shuffled deck of cards. 
* It provides several operations including 
*  initialize, shuffle, deal, and check if empty. 
*/ 
public class Deck 
{ 
/** 
* cards contains all the cards in the deck. 
*/ 
public static List<Card> cards; 

/** 
* size is the number of not-yet-dealt cards. 
* Cards are dealt from the top (highest index) down. 
* The next card to be dealt is at size - 1. 
*/ 
private int size; 
public static Card cardOne; 

/** 
* Creates a new <code>Deck</code> instance.<BR> 
* It pairs each element of ranks with each element of suits, 
* and produces one of the corresponding card. 
* @param ranks is an array containing all of the card ranks. 
* @param suits is an array containing all of the card suits. 
* @param values is an array containing all of the card point values. 
*/ 
public Deck(String[] ranks, String[] suits, int[] values) 
{ 
    for(int i=0; i<13;i++) 
    { 
     suits[i] = "Heart"; 
     ranks[i] = cardOne.rank(); 
     values[i] = cardOne.pointValue(); 
     cards.add(cardOne); 
    } 
    for(int i=0; i<13;i++) 
    { 
     suits[i] = "Spade"; 
     ranks[i] = cardOne.rank(); 
     values[i] = cardOne.pointValue(); 
     cards.add(cardOne); 
    } 
    for(int i=0; i<13;i++) 
    { 
     suits[i] = "Club"; 
     ranks[i] = cardOne.rank(); 
     values[i] = cardOne.pointValue(); 
     cards.add(cardOne); 
    } 
    for(int i=0; i<13;i++) 
    { 
     suits[i] = "Diamond"; 
     ranks[i] = cardOne.rank(); 
     values[i] = cardOne.pointValue(); 
     cards.add(cardOne); 
    } 

} 


/** 
* Determines if this deck is empty (no undealt cards). 
* @return true if this deck is empty, false otherwise. 
*/ 
public static boolean isEmpty() 
{ 
    if(cards.size()==0) 
     return true; 
    else 
     return false; 
} 

/** 
* Accesses the number of undealt cards in this deck. 
* @return the number of undealt cards in this deck. 
*/ 
public static int size() 
{ 
    return cards.size(); 
} 

/** 
* Randomly permute the given collection of cards 
* and reset the size to represent the entire deck. 
*/ 
public static List<Card> Shuffled[]; 
public void shuffle() 
{ 
    for(int i=0; i<52; i++) 
    { 
     cards.get(i); 

     int k=(int)(Math.random()*100); 
     while(k >52 || k<0) 
     { 
      k=(int)(Math.random()*100); 
     } 
     if(Shuffled[k]==null) 
      Shuffled[k]=(List<Card>) cards.get(i); 
    } 

} 

/** 
* Deals a card from this deck. 
* @return the card just dealt, or null if all the cards have been 
*   previously dealt. 
*/ 
public Card deal() 
{ 
    int cardDealed= (int)(Math.random()*100); 
    while(cardDealed >52 || cardDealed<0) 
    { 
     cardDealed=(int)(Math.random()*100); 
    } 
    Shuffled[cardDealed].remove(cardDealed); 

    return (Card) Shuffled[cardDealed]; 
} 

/** 
* Generates and returns a string representation of this deck. 
* @return a string representation of this deck. 
*/ 
@Override 
public String toString() 
{ 
    String rtn = "size = " + size + "\nUndealt cards: \n"; 

    for (int k = size - 1; k >= 0; k--) { 
     rtn = rtn + cards.get(k); 
     if (k != 0) { 
      rtn = rtn + ", "; 
     } 
     if ((size - k) % 2 == 0) { 
      // Insert carriage returns so entire deck is visible on console. 
      rtn = rtn + "\n"; 
     } 
    } 

    rtn = rtn + "\nDealt cards: \n"; 
    for (int k = cards.size() - 1; k >= size; k--) { 
     rtn = rtn + cards.get(k); 
     if (k != size) { 
      rtn = rtn + ", "; 
     } 
     if ((k - cards.size()) % 2 == 0) { 
      // Insert carriage returns so entire deck is visible on console. 
      rtn = rtn + "\n"; 
     } 
    } 

    rtn = rtn + "\n"; 
    return rtn; 
    } 
} 

私はトラブル(サブクラスである)DeckTesterクラスを一緒に配置する方法を考え出すを持っています。これまでのところ私は次のようなことがあります:

import java.util.List; 

/** 
* This is a class that tests the Deck class. 
*/ 
public class DeckTester extends Deck 
{ 
    public static List<Card> cards; 

    public DeckTester(String[] ranks, String[] suits, int[] values) 
    { 
     super(ranks, suits, values); 
    } 

    /** 
    * The main method in this class checks the Deck operations for consistency. 
    * @param args is not used. 
    */ 
    public static void main(String[] args) 
    { 

    } 
} 

私は完全に機能するカードクラスも持っています。デッキクラスをチェックする方法がわかりません。

答えて

1

testedクラスとtesterクラスは、inheritanceではなく一緒に配置されます。

だから、あなたがする必要があります。tester

    1. 輸入testedクラスは、それが例えばJunitかであなたの期待と一致した場合にtestedオブジェクト
    2. チェックのいくつかのロジックを実行testedクラス
    3. のインスタンスを作成しますTestNG
  • +0

    私はそれを行う必要があることを承知していますが、問題がある(ここでのJUnitを使用して)私はつもりはないよ

    は、あなたが使用できるさまざまな設定についての詳細に入るが、これは一例になります私はこれを達成する方法がわかりません。 – Pearlpoodle

    +1

    いいえ、あなたは気付きません。 'DeckTester'は' Deck'を拡張します - 完全に間違ったアプローチ –

    1

    私はRudziankoŭに同意します。テストクラスを使用してコンポジションを使用する方がずっと簡単です。 、

    public class DeckTester { 
    
        /** 
         Check if deck size is being instantiated correctly 
        */ 
        @Test 
        public void testDeckSize() { 
    
         String[] ranks = new String[1]; // Not sure what this should be 
         String[] suits = new String[4]; 
         int[] vals = new int[12]; 
         Deck deck = new Deck(ranks, suits, vals); 
         assert deck.size() == 52; 
        } 
    
    } 
    
    関連する問題