我遇到了运算符和随机数生成器的问题。我希望随机数生成器在1和h之间拉一个数字,用户选择h并存储为1,6,11和16然后我希望if语句查看随机数并确定它是否是做我编程的或去执行else语句。目前它似乎只执行if语句而从不执行else(第二个,第一个工作正常)。我的代码是
Random random = new Random();
int ran = random.Next(1, h);
if (s1 == 0 & s2 == 0 & s3 == 1)
{
s3 = s3 - 1;
cover0.Visible = true;
p1slable.Visible = true;
p2slable.Visible = true;
playagain.Visible = true;
score.Visible = true;
p1score.Visible = true;
p2score.Visible = true;
c = c + 1;
p2slable.Text = "" + c.ToString();
labelscore2.Visible = true;
winner2.Visible = true;
hintcover.Visible = true;
e1.Visible = false;
e2.Visible = false;
e3.Visible = false;
}
else
{
if (s1 == 0 & s2 == 0 & s3 == 2)
{
if (ran == 1 || ran == 3 || ran == 4 || ran == 5 || ran == 9 || ran == 10 || ran == 15)
{
s3 = s3 - 2;
cover0.Visible = true;
p1slable.Visible = true;
p2slable.Visible = true;
playagain.Visible = true;
score.Visible = true;
p1score.Visible = true;
p2score.Visible = true;
c = c + 1;
p2slable.Text = "" + c.ToString();
labelscore2.Visible = true;
winner2.Visible = true;
hintcover.Visible = true;
e1.Visible = false;
e2.Visible = false;
e3.Visible = false;
}
else { s3 = s3 - 1; }
我正在使用c#2015
答案 0 :(得分:2)
首先,您的代码不完整。我会假设你的片段中缺少的只是两个闭合的花括号。
考虑到这一点,让我们重构您的代码,以便更容易理解 ifs 和 elses 的混乱。
首先,为什么要检查s1
和s2
两次?您可以查看一次,然后查看s3
。
此外,在分支多个常量值时,您希望使用switch
语句。它更具可读性,它消除了像ran
检查那样无限和丑陋的 orings 的需要。
var random = new Random();
var ran = random.Next(1, h);
if (s1 == 0 && s2 == 0)
{
if (s3 == 1) //case handled: s1 = 0, s2 = 0, s3 = 1
{
s3 = s3 - 1;
//... etc.
}
else if (s3 == 2) //case handled: s1 = 0, s2 = 0, s3 = 2
{
switch (ran) //all cases handled
{
case 1:
case 3:
case 4:
case 5:
case 9:
case 10:
case 15:
s3 = s3 - 2;
//... etc.
break;
default:
s3 = s3 - 1;
break
}
}
} // s1 != 0 or s2 != 0 will jump here
好的,既然我们已经写了这样的文章,那就更容易推理出你正在处理的案件以及你不处理的案件。
您只处理s1
和s2
等于零且s3
等于1
或2
的情况。而已。 s1
,s2
或s3
的任何其他值都会忽略您的整个代码,因为它找不到匹配的if
或else
子句。这是你真正想要的吗?
答案 1 :(得分:0)
运行调试器并且它工作正常现在不知道它为什么以前没有工作以及调试器做了什么或做了什么。谢谢你抽出时间帮助我。 (不知道有一个调试器只使用该程序几周制作游戏,(nim))