Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#If语句和随机类的行为很奇怪_C# - Fatal编程技术网

C#If语句和随机类的行为很奇怪

C#If语句和随机类的行为很奇怪,c#,C#,我正在制作一个C#练习程序,其中包括3名决斗者,每个人的精确度不同。他们按照预先设定的顺序轮流射击,直到另外两人死亡,然后重复射击10公里,每次都为胜利者增加一个胜利。我的问题是,由于某种原因,一旦一个if语句中的一个为真,该决斗者将获得所有10公里的胜利。我认为这是随机班的问题,但直到上周我才开始学习C#。这也是我在这个网站上的第一篇帖子。我经常使用它,但我以前从未问过,通常别人已经问过了 class MainClass { public static void Main(st

我正在制作一个C#练习程序,其中包括3名决斗者,每个人的精确度不同。他们按照预先设定的顺序轮流射击,直到另外两人死亡,然后重复射击10公里,每次都为胜利者增加一个胜利。我的问题是,由于某种原因,一旦一个if语句中的一个为真,该决斗者将获得所有10公里的胜利。我认为这是随机班的问题,但直到上周我才开始学习C#。这也是我在这个网站上的第一篇帖子。我经常使用它,但我以前从未问过,通常别人已经问过了

    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我接受了,我的代表太低了,投票结果无法显示。我真不敢相信我犯了这么简单的错误……我认为这是随机类的问题…-非常的声明需要非常的证据