C#If语句和随机类的行为很奇怪
我正在制作一个C#练习程序,其中包括3名决斗者,每个人的精确度不同。他们按照预先设定的顺序轮流射击,直到另外两人死亡,然后重复射击10公里,每次都为胜利者增加一个胜利。我的问题是,由于某种原因,一旦一个if语句中的一个为真,该决斗者将获得所有10公里的胜利。我认为这是随机班的问题,但直到上周我才开始学习C#。这也是我在这个网站上的第一篇帖子。我经常使用它,但我以前从未问过,通常别人已经问过了C#If语句和随机类的行为很奇怪,c#,C#,我正在制作一个C#练习程序,其中包括3名决斗者,每个人的精确度不同。他们按照预先设定的顺序轮流射击,直到另外两人死亡,然后重复射击10公里,每次都为胜利者增加一个胜利。我的问题是,由于某种原因,一旦一个if语句中的一个为真,该决斗者将获得所有10公里的胜利。我认为这是随机班的问题,但直到上周我才开始学习C#。这也是我在这个网站上的第一篇帖子。我经常使用它,但我以前从未问过,通常别人已经问过了 class MainClass { public static void Main(st
class MainClass
{
public static void Main(string[] args)
{
//sets up objects and the won boolean
bool won = false;
Random shot = new Random();
Duelist a = new Duelist();
Duelist b = new Duelist();
Duelist c = new Duelist();
//sets names
c.SetName("Charlie");
a.SetName("Aaron");
b.SetName("Bob");
//loops through 10k times
for (int i = 10000; i > 0; i--)
{
//resets won to false
won = false;
while (!won)
{
//Aarons turn
if (a.GetAlive())
{
//If Charlie is alive, shoot at him
if (c.GetAlive())
{
if (shot.Next(1, 4) == 1)
{
c.SetAlive(false);
}
}
//If bob is alive, shoot at him
else if (b.GetAlive())
{
if (shot.Next(1, 4) == 1)
{
b.SetAlive(false);
}
}
//if neither of them are alive, aaron wins, and end of while loop
else
{
a.AddWin();
won = true;
}
}
//Bobs turn
if (b.GetAlive())
{
if (c.GetAlive())
{
if (shot.Next(1, 3) == 1)
{
c.SetAlive(false);
}
}
else if (a.GetAlive())
{
if (shot.Next(1, 3) == 1)
{
a.SetAlive(false);
}
}
else
{
b.AddWin();
won = true;
}
}
//Charlies turn
if (c.GetAlive())
{
if (b.GetAlive())
{
b.SetAlive(false);
}
else if (a.GetAlive())
{
a.SetAlive(false);
}
else
{
c.AddWin();
won = true;
}
}
}
}
//prints results
Console.WriteLine(a.GetName() + ": " + a.GetWin());
Console.WriteLine(b.GetName() + ": " + b.GetWin());
Console.WriteLine(c.GetName() + ": " + c.GetWin());
Console.Read();
}
}
class Duelist
{
private string name;
private int wins;
private bool alive;
public Duelist()
{
name = "Name";
wins = 0;
alive = true;
}
public void SetName(string n)
{
name = n;
}
public string GetName()
{
return name;
}
public void AddWin()
{
wins++;
}
public int GetWin()
{
return wins;
}
public void SetAlive(bool al)
{
alive = al;
}
public bool GetAlive()
{
return alive;
}
}
您忘记了在每次迭代中设置每个字符的活动状态
//resets won to false
a.SetAlive(true);
b.SetAlive(true);
c.SetAlive(true);
won = false;
我正要打这个。哇,我恨我自己。谢谢。@Bradley99请投票并接受我的答案,如果它解决了问题。@Han我接受了,我的代表太低了,投票结果无法显示。我真不敢相信我犯了这么简单的错误……我认为这是随机类的问题…-非常的声明需要非常的证据