Case语句仅在尝试向char[]数组返回新值时达到默认值



我正在为学校作业编写一个刽子手游戏,我的计划是为每个难度创建一个长度固定的空数组,并随机分配一个长度相同的单词给它们。

我在这个函数上遇到了一段时间的麻烦,我已经做了很多变通方法(比如default:return defaultReturn;(

char[] defaultReturn = { 'E', 'R', 'R', 'O', 'R' };
char[] difficulty1 = new char[4];
char[] difficulty2 = new char[5];
char[] difficulty3 = new char[6];
char[] difficulty4 = new char[7];
char[] difficulty5 = new char[10];
char[] difficulty6 = new char[18];
public char[] RndWord(int difficulty)
{
Random rnd = new Random();
int rndSelect = rnd.Next(5);

switch(difficulty)
{
case 1:
switch(rndSelect)
{
case 0:
{
char[] difficulty1 = { 'C', 'A', 'S', 'A' };
return difficulty1;
}
case 1:
{
char[] difficulty1 = { 'S', 'A', 'G', 'A' };
return difficulty1;
}
case 2:
{
char[] difficulty1 = { 'T', 'E', 'S', 'E' };
return difficulty1;
}
case 3:
{
char[] difficulty1 = { 'V', 'I', 'D', 'A' };
return difficulty1;
}
case 4:
{
char[] difficulty1 = { 'G', 'U', 'M', 'E' };
return difficulty1;
}
default:
return defaultReturn;
}
case 2:
switch (rndSelect)...
case 3:
switch(rndSelect)... 
case 4:
switch(rndSelect)...                    
case 5:
switch(rndSelect)...

case 6:
switch (rndSelect)...
default:
return defaultReturn;
}
}

当你按下某个按钮时,我会调用该函数,它会更新你当前试图猜测的单词。

private void btnDif_Click(object sender, EventArgs e)
{
switch(numDif.Value)
{
case 1:
RndWord(1);
lblWord.Text = String.Format("{0} {1} {2} {3}",
difficulty1[0], difficulty1[1],
difficulty1[2], difficulty1[3]);
break;

// other cases...
}

现在的问题是,该方法除了默认情况外从未达到任何情况(编辑:我已经测试过它,它达到了两种默认情况(。我不知道问题是随机数生成、第二个case语句、数组还是其他什么。

因为这是家庭作业,我不会帮你解决问题,但我会告诉你做错了什么。我看到两个主要问题。

这里的第一个问题是范围中的一个

作为成员变量,您正在创建difficulty1。然后,在switch语句中,您正在创建一个新语句。这就是问题的症结所在您正在声明和设置一个同名的全新变量

char[] difficulty1 = { 'C', 'A', 'S', 'A' }; // the char[] at the beginning here denotes a declaration.
return difficulty1; // you're returning the local difficulty1, not the member variable 

然后返回它,但在调用该函数时,您丢弃了返回值。

RndWord(1);

调用它,但不将返回设置为任何内容。因此,您实际上从未访问过{ 'C', 'A', 'S', 'A' }

这里的第二个问题是达到默认值

然而,这个问题并不明显。你需要做所谓的";调试";。将断点添加到代码中,并使用F10/F11来";步骤";逐行浏览您的程序。

我的猜测是numDif.Value并不是你想象的那样。然而,你需要通过调试来逐步了解程序的实际情况。

我强烈鼓励你学习";调试";。这是一项非常有价值的技能。

最新更新