2011-10-08 67 views
1

我目前正在對使用枚舉卡類的手,要求我補充方法是:手牌:總價值(JAVA)

添加卡進手

計算總價值所有牌在手中(所以如果手中有3個10,那麼總價值將是30)

然而,問題是我無法找到如何將所有總數相加在手階層中使用該方法(如任務要求我們)。

任何幫助,將不勝感激

繼承人的代碼,我的西裝枚舉

public enum Suit 
{ HEARTS, CLUBS, DIAMONDS, SPADES; } 

這裏是我的排名enum.This代碼一個有幾個增加的方法,包括getValue方法

public enum Rank { 
    ONE(1),TWO(2),THREE(3),FOUR(4),FIVE(5), SIX (6), SEVEN(7), EIGHT(8), NINE(9), TEN(10), KING(10), QUEEN(10), 
    JACK(10); 

    private final int cardValue; 

    private Rank (int nDays) { 
     cardValue = nDays; 
    } 

    public int getValue() { 
     return cardValue; 
    } 
} 

這是使用Rank和Suit枚舉來打印詳細信息(原諒混亂)的Card類

public class Card { 
    private Rank rank; 
    private Suit suit; 

    public Card (Rank theRank) {  
     this(theRank,Suit.HEARTS); 
    } 

    public Card (Rank theRank, Suit theSuit) { 
     rank = theRank;   
     suit = theSuit; 
    } 

    public Rank getRank()  { return rank; } 
    public Suit getSuit () { return suit; } 

    public String toString () { return (rank + " of " + suit +"\n Value of card = " + rank.getValue()); } 

    } 

這是手工類,需要addCard法和總價值的方法。我也做了addCard方法,現在需要做的總價值法)

public class Hand { 
private Card theCards[ ]; 
private Rank rank; 
private int numCards; private int totalValue; 
private static final int max = 5; 

public Hand () 
{ 
    theCards = new Card [max]; 
    numCards = 0; 
} 

public void addCard(Card aCard) 
{ 
     if (numCards < max) 
       theCards[numCards++] = aCard; 
     else 
     { 
      System.out.println("Cannot add any more cards as hand is full"); 
     } 
} 

public void totalValue() 
    { 
    int handValue = 0; 


     for(Card C: theCards) 
     { 
      //get the rank values to appear then print them off 
      //Add up all values of cards and display the total 
     totalValue = handValue + C.getValue(); //This was just a test to see if calling up the value of card C would work 

     } 
     System.out.println("The total value of all the cards is: " + totalValue); 
} 


public String toString () 
{ 
    String s = ""; 
    for (int i = 0; i < numCards; ++i) {  s += "\n" + theCards[i]; 
    } 
    return s; 
          }  

至於執行力度去其剛剛創建的卡對象,並將它們添加到對象的手的情況下,所以我不認爲我會做需要在這裏發佈。感謝任何能幫助我解決問題的人。

+0

如果這是家庭作業,請將其標記爲家庭作業。 – erickson

+0

女王和國王怎麼樣? – Gevorg

+0

@Gevorg:向右滾動代碼窗口。 :o –

回答

2

卡沒有getValue()方法,但Rank的確如此。因此,通過其getRank()方法拿到卡的等級然後調用返回的排名getValue()

2

一個Card的值是可以通過其rank字段。現在你正在嘗試直接調用getValue()Card,但有沒有這樣的方法(還)。

另外,您通常會從totalValue()方法中得到return手的總價值,而不是簡單地打印它;這允許其他代碼實際使用該值。

-2

值是等級內。難道里面手排名對象起到任何作用(如在手,你必須指定遊戲規則加倍的相應的卡值)?你只需要添加等級值。我重寫了你的代碼,省去了一些不必要的計數器/變量。另一方面,如果數組增長,最好保留一個列表而不是數組。

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

public class Hand { 
    private final List<Card> cards = new ArrayList<Card>(); 
    private Rank rank; 
    private static final int MAX = 5; 

    public void addCard(Card aCard) { 
    if (cards.size() < MAX) { 
     cards.add(aCard); 
    } else { 
     System.out.println("Cannot add any more cards as hand is full"); 
    } 
    } 

    public void totalValue() { 
    int totalValue = 0; 
    for (Card card : cards) { 
     totalValue += card.getRank().getValue(); 

    } 

    System.out 
     .println("The total value of all the cards is: " + totalValue); 
    } 

    @Override 
    public String toString() { 
    StringBuilder sb = new StringBuilder(); 
    for (Card card : cards) { 
     sb.append('\n').append(card.toString()); 
    } 

    return sb.toString(); 

}}

+0

不應該totalValue返回的東西?正如所寫的,它只是進行計算,然後丟棄它,這對新手來說有點誤導。 Héck,你的代碼甚至不會編譯。 –

+0

費爾南多是對的。 Netbeans編譯它,但它然後給出一個nullexception錯誤。根據Fernando的說法,有一種方法可以在不丟棄的情況下進行計算? –

+0

@ThomasPooler:totalValue()不應該有一個println語句。相反,它應該被定義爲返回一個int,而不是void,然後在方法結束時返回totalValue。然後在需要計算手牌的總值時隨時調用此方法。 –

-1

我設法弄清楚如何使它打印照片,無需返回任何nullexception錯誤。基本上,我只是簡單地將數組轉換爲數組列表,因爲它更實用。這是Hand類的最終版本。

import java.util.*; 
public class Hand { 

private ArrayList<Card> theCards = new ArrayList<Card >() ; 
private static final int max = 5; 

public void addCard(Card aCard) 
{ 
     if (theCards.size() < max) 
       theCards.add(aCard); 
     else 
     { 
      System.out.println("Cannot add any more cards as hand is ull"); 
     } 
} 
public void totalValue() { 
int totalValue = 0; 
for (Card card : theCards) { 
    totalValue += card.getRank().getValue(); 

    } 
    System.out 
    .println("The total value of all the cards is: " + totalValue); 
} 

    public void outputAllCards () 
{ 
     System.out.println("Outputting all card etails\n========================"); 
     for (Card card : theCards) 
     { 
      System.out.println(card.toString()); 
     } 
     System.out.println("========================"); 
    } } 

我放入一個println爲了在調用totalValue方法時打印出一條消息。我試圖通過將方法轉換爲字符串或int來返回,但這不起作用

+0

可以複製別人的代碼或建議,但至少不要提及貢獻。 –