2014-12-01 3 views
-2

Я делаю блэкджек и делаю класс карты. Мой класс карты работает, но мне нужно, чтобы атрибут значения устанавливал аксессуар для поиска в массиве значений и определял, действителен ли аргумент value или нет. Я не уверен, как это сделать. Любая помощь будет присвоеноНайдите значение в массиве и проверьте, действительно ли значение

Вот что у меня есть для моего класса карты

private class Card 
{ 
    public enum SUIT 
    { 
     HEARTS, 
     SPADES, 
     DIAMONDS, 
     CLUBS 
    }; 

    private SUIT _suit; 
    private String _value; 

    public Card(SUIT suit, String value) 
    { 
     _suit = suit; 
     _value = value; 
    } 

    private String[] values = 
    {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; 

    public SUIT Suit 
    { 
     get { return _suit; } 
     set { _suit = value; } 
    } 

    public String Value 
    { 
     get { return _value; } 
     set { _value = value; } 
    } 
} 
+1

проверить метод linq [Contains] (http://msdn.microsoft.com/en-us/library/bb352880%28v=vs.100%29.aspx) –

+0

Итак, когда кто-то называет 'Card.Value = «some value»; вы хотите проверить, что «некоторое значение» содержится в массиве «Card.values»? – mason

+0

можете ли вы объяснить, что ваша проблема с проверкой действительного значения, потому что все это кажется тривиальным. Разве вы не знаете, как обращаться с получением недопустимого значения? – HugoRune

ответ

1

Чтобы проверить, при условии, значение разрешено, вы можете использовать метод Contains() на IEnumerable

I» d также рекомендуют имя лучшей переменной, чем values. Как насчет validValues?

private String[] validValues = 
    {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; 
public String Value 
{ 
    get { return _value; } 
    set 
    { 
     if (validValues.Contains(value)) 
      _value = value; 
     else 
      throw new InvalidOperationException(); //or whatever you like 
    } 
} 
4

Один из способов будет использовать enum для значения, а также:

public enum Value 
{ 
    Two, 
    Three , 
    Four, 
    Five, 
    Six, 
    Seven, 
    Eight, 
    Nine, 
    Ten, 
    Jack, 
    Queen, 
    King, 
    Ace, 
}; 

public Value Value 
{ 
    get { return _value; } 
    set { _value = value; } 
} 

Как дизайн записки, так как значение экземпляра карты не изменится, лучше дизайн будет только установите костюм и значение в конструкторе и сделайте свойства доступными только для чтения. Это также будет хорошим использованием Factory Pattern, но это может быть более продвинутым, чем вы хотите прямо сейчас (если вы не понимаете, что это такое, не используйте его).

+1

Также вы можете сделать 'Ace = 1', поэтому он, по крайней мере, имеет один из его действительных значения! –

+0

@RufusL Он будет иметь значение 11 (на один больше предыдущего значения 10) –

+0

Ах, не заметил, что в первый раз ... –

Смежные вопросы