我正在制作一个简单的程序,当单击一个按钮时,它将在标签中显示一张卡片
使用随机数生成器创建1-4之间的数字(并设置为心形,菱形,棍棒或黑桃)
另一个生成器可在1-13之间创建一个数字(然后将其设置为ace,1、2、3、4、5、6、7、8、9、10,jack,queen,king) >
然后使用if语句设置要调用的西装
然后使用switch语句将卡设置为其相应的卡
但是我收到一个错误:
尝试构建我的程序时出现错误CS0165
这是我的程序:
这是我的代码:
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Random myRandom = new Random();
int suitNo, cardNo;
string suit, card;
suitNo = myRandom.Next(1, 4);
cardNo = myRandom.Next(1, 13);
if (suitNo == 1)
{
suit = "Hearts";
}
if (suitNo == 2)
{
suit = "Diamonds";
}
if (suitNo == 3)
{
suit = "Clubs";
}
if (suitNo == 4)
{
suit = "Spades";
}
switch (cardNo)
{
case 1:
card = "Ace";
break;
case 2:
card = "Two";
break;
case 3:
card = "Three";
break;
case 4:
card = "Four";
break;
case 5:
card = "Five";
break;
case 6:
card = "Six";
break;
case 7:
card = "Seven";
break;
case 8:
card = "Eight";
break;
case 9:
card = "Nine";
break;
case 10:
card = "Ten";
break;
case 11:
card = "Jack";
break;
case 12:
card = "Queen";
break;
case 13:
card = "King";
break;
}
label1.Text = "Your card is a " + card + " of " + suit;
}
为什么会给我一个错误的任何想法?
答案 0 :(得分:3)
您的switch
子句不提供default
的情况,因此编译器无法静态推断出将始终分配值到card
的情况。即使在实践中cardNo
会介于1
和13
之间,但如果不运行该程序就无法进行验证。
suit
当然也是如此。
要么在suit
子句之前初始化card
和switch
的值,要么创建一个default
大小写。
当您不期望编码值以外的其他任何值时,一个好的做法是提供一个default
情况,您只需抛出一个异常或Debug.Assert(false)
。
一个更简单的结构就是定义
private static readonly string[] suits = { "Hearts", "Diamonds", "Clubs", "Spades" };
private static readonly string[] cards = { "Ace", ... , "King" };
然后您的方法基本上可以简化为:
int suitNo = myRandom.Next(suits.Length);
int cardNo = myRandom.Next(cards.Length);
string suit = suits[suitNo];
string card = cards[cardNo];
然后从冗长的if
和switch
es中解脱出来。
答案 1 :(得分:-1)
就编译器而言,西装和卡片都可以不分配。您将说“没办法”,因为您总是有4套西服和13张卡,但是编译器不知道如何玩游戏。一个简单的解决方法是在变量的声明中对其进行初始化。 – 9小时前的汉斯·帕桑(
在开始时初始化变量字符串suit和card修复了我的错误,
您在Random.Next的参数中也有一个错误。由于此错误,您将永远不会得到黑桃王:-((检查文档:docs.microsoft.com/zh-cn/dotnet/api/…)– 9个月前的埃尔贡佐
还将myRandom.Next
从1,4
和1,13
更改为1,5
和1,14
意味着我现在显示了所有卡片,如@elgonzo指出的,{ {1}}和1,4
表示不会抽出黑桃王,不仅会铲出黑桃王,而且不会抽出所有西装的王,也不会抽出整个黑桃之王-直到我将上限更改为{ {1}}和1,13
请参见下面的工作代码:
1,5