C#骰子游戏,Sum仅返回最后2个卷而不是整个游戏的总和

时间:2014-03-28 00:17:38

标签: c# visual-studio-2010 visual-studio sum average

我用2个骰子创建一个骰子游戏,我已经让它工作了但是唯一的问题是我无法从所有卷(整个游戏)获得总和,我只得到最后2个卷的总和如果我使用Sum方法,我如何找到所有卷的总和?这是我的代码:

        Console.BufferHeight = 500;
        Random x = new Random();
        int throw_times = 1;

        int[] dice = new int[2];
        dice[0] = x.Next(1, 7);
        dice[1] = x.Next(1, 7);

        for (int i = 1; i <= 100; i++)
        {
            dice[0] = x.Next(1, 7);
            dice[1] = x.Next(1, 7);

            int total_var = dice[0] + dice[1];
            int[] total_array = {dice[0] + dice[1]};//total in array

            Console.Write("Throw " + throw_times + ": " + dice[0] + " and " + dice[1] + " = ");
            Console.WriteLine(total_var);
            throw_times++;

            Array.Sort(dice);

            for (int a = dice.Length - 1; a >= 0; a--)
            {
                int s = dice[a];
                Console.WriteLine("#" + s);
            }
        }

        Console.WriteLine("Total sum: " + dice.Sum());//only returns sum of last 2 rolls
        Console.WriteLine("Average: " + dice.Average());//only return average of last 2 rolls

如果有人知道如何获得总滚动金额,请回答,非常感谢。

1 个答案:

答案 0 :(得分:1)

SumAverage扩展方法将计算数组中当前所有内容的总和和平均值,并且因为您在每次试验中重新设置数组,它只会包含最后两项。

要获得所有骰子卷的总和或平均值,你要么必须扩展你的数组,以便它记录整个程序中所有的骰子卷,或者只是保持一个总计(这似乎更简单) :

int[] dice = new int[2];
int sum = 0;

for (int i = 1; i <= 100; i++)
{
    dice[0] = x.Next(1, 7);
    dice[1] = x.Next(1, 7);
    sum += dice[0] + dice[1];

    ...
}

Console.WriteLine("Total sum: " + sum);

现在你的问题并不完全清楚你是否也想要所有骰子卷的平均,或者只是最后两个,但是因为你知道总和并且你知道总数(因为那是在您的应用程序中硬编码),您可以非常轻松地计算所有骰子卷的平均值:

Console.WriteLine("Total sum: " + (sum / 200)); // 200 because you roll 2 dice in 100 trials