С# Простой алгоритм подбрасывания монеты не работает

У меня проблема с моим кодом, он должен спросить пользователя, сколько раз он хочет подбросить монету, а затем продолжить подбрасывать эту монету указанное количество раз, а затем сказать, сколько было орлов и решек. Проблема в том, что программа спрашивает, сколько раз нужно подбросить монету, а затем просто закрывается после ввода пользователем. Может кто-нибудь, пожалуйста, скажите мне, что я сделал неправильно.

static void Main(string[] args)
{
    int heads = 0;
    int tails = 0;
    int counter = 0;
    Random coinflip = new Random();

    Console.WriteLine("How many times would you like to flip a coin? ");
    counter = Convert.ToInt32 (Console.ReadLine());

    for (int i = 0; i < counter; i++)
    {
        int flip = coinflip.Next(1, 3);
        if (flip == 1)
        {
           heads++;
        }
        else 
        {
           tails++;
        }
    }

    Console.WriteLine("You flipped a coin " + counter 
       + "times " + "and you got " + heads + "heads and " + tails + "tails.");
    Console.WriteLine();
}

c#
person Oretas.L    schedule 09.08.2017    source источник
comment
Добавьте Console.ReadLine() в конце Main.   -  person Jason Boyd    schedule 09.08.2017
comment
Не имеет отношения к вашему вопросу, но вы можете избавиться от целой переменной tails. Он не нужен с tails = counter - heads.   -  person oerkelens    schedule 09.08.2017
comment
@RufusL выглядит элегантно, но, похоже, не работает. Я запускал его с 1000 попыток, и всегда результат был неравномерным, обычно 800 против 100 орла к решке. Я предполагаю, что обычный класс Random() не является таким случайным, и когда операции выполняются слишком быстро, вы получаете слишком много похожих результатов.   -  person Sach    schedule 09.08.2017
comment
Интересно! Ну, одна небольшая оптимизация будет состоять в том, чтобы выбрать случайное число 0 или 1, тогда внутри цикла for будет просто: heads += coinflip.Next(0, 2);   -  person Rufus L    schedule 09.08.2017
comment
Да, это намного лучше, оба около 500. Кроме того, если мне нужны более точные случайные числа, особенно в быстром цикле, я обычно использую RNGCryptoServiceProvider в System.Security.Cryptography, что намного лучше. Вот рабочий пример, если кому интересно.   -  person Sach    schedule 09.08.2017
comment
Я должен добавить, что некоторое время назад я обнаружил, что в SO просто больше нет ссылки.   -  person Sach    schedule 09.08.2017


Ответы (1)


Попробуйте изменить окончание

Console.WriteLine()

to

Console.ReadKey()

Это должно держать окно открытым, пока вы не наберете клавишу, что позволит вам увидеть свой вывод.

person nolnah93    schedule 09.08.2017