尝试捕获不捕获输入异常
本文关键字:异常 输入 | 更新日期: 2023-09-27 18:33:20
我正在创建一个二十一点游戏,到目前为止我已经制作了一个纸牌类。卡类有效,但是当我去测试我的卡类时,当它执行 test3 时,异常应该捕获,因为"X"不在值数组中,但由于某种原因它没有捕获并显示 X 而不是错误消息"无效输入"。我想发生的是我的值集访问器应该搜索 String[]values 数组,然后确定 value 参数是否有效,如果无效,则抛出一个新的异常。我不确定如何解决这个问题。此外,我不能为我的值使用枚举,我需要使用值数组。
任何帮助将不胜感激
这是我的卡片类的内容
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();
您通过构造函数将不正确的值分配给后备字段。这不是一件坏事,但它绕过了你的属性逻辑。
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.
}
你有用set
编写的Value
的检查逻辑,但是在你的代码中,你传递X
构造函数,构造函数分配给私有成员变量(从而完全避免了你写的很好的过滤逻辑)。
您应该像这样分配给构造函数中的属性:
public Card(SUIT suit, String value)
{
Suit = suit;
Value = value;
}