2014-12-05 79 views
0

我正在創建一個二十一點遊戲,到目前爲止,我已經做了一個卡類。卡類的工作,但是當我去測試我的卡類,當它測試3異常應該趕上,因爲「X」不在值數組,但由於某種原因,它不捕獲和顯示X而不是錯誤消息「輸入無效」。我想要發生的是我的值集訪問者應搜索字符串[]值數組,然後確定值參數是否有效,如果它不是然後拋出一個新的異常。我不知道如何解決這個問題。此外,我不能使用枚舉值我需要使用values數組。嘗試抓住不輸入異常與輸入

任何幫助,將不勝感激

這裏是我有我的卡類

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; 
    } 

    public SUIT Suit 
    { 
     get 
     { 
      //Return member variable value 
      return _suit; 
     } 
     set 
     { 
      _suit = value; 
     } 
    } 

    private String[] values = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" }; 
    public String Value 
    { 
     get { return _value; } 
     set 
     { 
      if (!values.Contains(value)) 
      { 
       throw new ArgumentException("Invalid Input"); 
      } 
      _value = value; 
     } 
    } 
} 

這裏是我的代碼與

try 
     { 
      Card testCard1 = new Card(Card.SUIT.SPADES, "Q"); 
      Console.WriteLine(testCard1.Suit + " " + testCard1.Value); 
      Card testCard2 = new Card(Card.SUIT.DIAMONDS, "10"); 
      Console.WriteLine(testCard2.Suit + " " + testCard2.Value); 
      Card testCard3 = new Card(Card.SUIT.DIAMONDS, "X"); 
      Console.WriteLine(testCard3.Suit + " " + testCard3.Value); 

     } 
     catch (ArgumentException e) 
     { 
      Console.WriteLine(e.Message); 
     } 
     Console.ReadLine(); 
+0

[屬性C#基礎教程(http://www.tutorialspoint.com/csharp/csharp_properties.htm)本讀了' andrew689' – MethodMan 2014-12-05 21:06:46

+1

問題出在你的構造函數中,你沒有調用屬性來設置值,而是直接將它設置爲成員變量。 – Sorceri 2014-12-05 21:09:28

+0

我發誓我已經多次看過這個相同的問題;這是一個任務還是什麼? – 2014-12-05 21:20:47

回答

6

測試你是通過構造函數將不正確的值分配給後臺。這不是一件壞事,但是它繞過了你的屬性邏輯。

public Card(SUIT suit, String value) 
{ 

    _suit = suit; 
    _value = value; // this assignes the value directly to the field, bypassing your property-logic. 
} 

更改像這樣,將是最簡單的解決方案

public Card(SUIT suit, String value) 
{ 

    _suit = suit; 
    Value = value; // use the property here. 
} 
1

您有Value寫在set檢查邏輯,但在你的代碼要傳遞X在構造函數,這是分配給私有成員變量(從而完全避免你寫的漂亮的過濾器邏輯)。

你應該分配給特性在這樣的構造:

public Card(SUIT suit, String value) 
{ 
    Suit = suit; 
    Value = value; 
}