2015-11-21 84 views
0

我試圖編寫一個代碼來構建一個52張牌堆,然後將這些牌交給n個玩家(這對一些玩家來說可能有額外的牌)。獲勝者是擁有黑桃王牌的人。程序運行不正常

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

    int numberOfPlayers = Integer.parseInt(args[0]); 
    CardPile deck = CardPile.makeFullDeck(); 
    CardPile [] players = new CardPile[numberOfPlayers]; 

    for (int i=0;i<numberOfPlayers;i++) { 
     int numofnum = i%numberOfPlayers; 

     players[i] = new CardPile(); 
    } 

    for (int i=0;i<52;i++) { 
     int numofnum =i%numberOfPlayers; 

     CardPile curPlayer = players[i%numberOfPlayers]; 
     Card nextCard = deck.get(i); 
     players[numofnum].addToBottom(nextCard); 

    } 

    for (int i=0;i<numberOfPlayers;i++) { 

     if (players[i].find(Suit.SPADES, Value.ACE) != -1) { 

     System.out.println("Player " + i + " is the winner"); 
     } 
    } 

    } 
} 

這裏是CardPile

public class CardPile{ 
    private Card[] cards; 
    private int numCards; 


    public static void main(String[] args){ 


    } 


    public CardPile(){ 
    Card[] constructor = new Card[52]; 
    cards = constructor; 
    numCards = 0; 
    } 

    public boolean isEmpty(){ 
    return this.numCards==0; 
    } 

    public void addToBottom(Card c){ 
    int i = 0; 
    for(i = 0;i<52;i++){ 
     if(cards[i]==null){ 
     break; 
     } 
    } 
    numCards = i; 
    cards[i] = c; 
    } 


    public Card get(int i){ 
    return cards[i]; 
    } 

    public Card remove(int i){ 
    Card removed = cards[i]; 
    for(i = i;i<51;i++){ 
     cards[i]=cards[i+1]; 
    } 
    cards[51]= null; 
    numCards=numCards-1; 
    return removed; 
    } 

    public int find(Suit a,Value b){ 
    int i = 0; 
    for(i=0;i<52;i++){ 
     if(cards[i].getSuit()==a && cards[i].getValue()==b){ 
     break; 
     } 
     else{ 
     i = -1; 
     return i; 
     } 
    } 
    return i; 
    } 

    public String toString(){ 
    String x = ""; 
    String y = ""; 

    for(int i=0;i<numCards;i++){ 
     y = cards[i].toString(); 
     x = x + i + "." + y +" "; 
    } 
    return x; 

    } 

    public static CardPile makeFullDeck(){ 

    CardPile pile = new CardPile(); 
    for(Value v: Value.values()){ 
     for(Suit s: Suit.values()){ 
     pile.addToBottom(new Card(s,v)); 
     } 
    } 

    UtilityCode.shuffle(pile.cards, pile.numCards); 

    return pile; 

    } 


} 

我的問題是,有時當我運行CardGame它打印出「玩家X是贏家」,但有時不顯示任何信息。任何人都可以幫助我嗎?謝謝

+1

請進行調試以找出問題所在。爲了找出爲什麼有時它打印出勝者,有時候不打印,就把打印語句用來監視變量的值,條件的輸出,計算等等,找出哪裏出了問題,在哪裏? – Raf

回答

1

CardPile.find()將返回-1,除非第一張卡片是正在搜索的卡片。將其更改爲:

public int find(Suit a,Value b){ 
    for(int i=0;i<52;i++){ 
     if(cards[i].getSuit()==a && cards[i].getValue()==b){ 
     return i; 
     } 
    } 
    return -1; 
    }