В C# как мне хранить количество раз, когда случайные числа равны определенным суммам в массиве? - PullRequest
0 голосов
/ 22 апреля 2020

Я пишу программу, которая бросает _ количество _ односторонних кубиков _ раз, как указано пользователем. Это проект с установленными требованиями, такими как структура класса и тот факт, что мне нужно использовать массив , чтобы показать свои результаты. Предполагается, что результаты будут отображать каждую итоговую сумму, которую я мог получить, и количество раз, которое я получал по каждой итоговой сумме после броска в течение указанного количества раз.

Я написал свою попытку на это и полностью ожидал, что это сработает , но, конечно, это не так. Бросая 1000 раз и бросая 2 кубика с 6 сторонами, вот мои результаты:

4) 4
6) 4
8) 4
10) 4
12) 4

Я бы ожидал что-то вроде:

2) 85
3) 83
4) 84
5) 82
... until 12

Сумма не начинается с 2 это начинается с 4, он катится 20 раз вместо 1000, и все значения одинаковы. Есть идеи, что может быть не так?

Вот мой код:

    private int[] myTotals;
    private int possibleTotal = 2;
    private int arrayLocation = 0;
    private int myNumberOfDice;
    private string results = "";
    private static Random diceGenerator = new Random();

    public DiceFactory()
    {

    }

    public void rollDice(int numberOfRolls, int numberOfSides, int numberOfDice)
    {
        myNumberOfDice = numberOfDice;

        myTotals = new int[numberOfRolls];

        arrayLocation = possibleTotal - 2;

        for (int i = 0; i < numberOfRolls; i++) {
            myTotals[arrayLocation] = diceGenerator.Next(1, numberOfSides + 1);
            myTotals[arrayLocation]++;
        }

        while (possibleTotal <= numberOfSides * myNumberOfDice)
        {
            results += (possibleTotal) + ") " + myTotals[arrayLocation] + "\r\n";
            possibleTotal++;
        }
    }

    public string getResults()
    {

        return results;
    }

}

1 Ответ

0 голосов
/ 23 апреля 2020

arrayLocation устанавливается в 4 (6 - 2) в начале вашего метода и не изменяется, когда вы go изменяете либо ваш бросок l oop, либо построение результата l oop. Это объясняет, почему вы видите значение 4 для всех ваших выходов.

Я бы предложил придерживаться простого for l oop для построения результата l oop:

for (int i = 2; i <= numberOfSides * myNumberOfDice; i++)
{
    results += (i) + ") " + myTotals[i] + "\r\n";
}

Это не единственная ваша проблема. Вам нужно будет выяснить, как сложить результаты броска нескольких кубиков. (Ваш код в настоящее время не использует myNumberOfDice в цикле l oop.) Определенно научитесь использовать ваш отладчик и поймите, что, по вашему мнению, должно быть в каждой переменной на каждом этапе пути, и сравните это с тем, что на самом деле показывает каждый шаг пути. Разбиение сложных вещей на маленькие, поддающиеся проверке шаги - вот суть разработки программного обеспечения.

...