Случайное число в c #, которое должно быть точно случайным каждый раз? - PullRequest
0 голосов
/ 12 ноября 2011

Я пытаюсь сгенерировать случайное число для моей математической игры. Но я думаю, что я делаю что-то не так. Пожалуйста, помогите мне исправить мой код. Пожалуйста, попробуйте включить какое-то объяснение, почему мой код неверен. Заранее спасибо!

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;


    namespace MindTraining
    {
        class Program
        {
            static void Main(string[] args)
            {

                Console.WriteLine("Enter the digits of first number ");
                int a=int.Parse(Console.ReadLine());
                Console.WriteLine("Enter the digits of second number");
                int b = int.Parse(Console.ReadLine());

                Random RandomClass = new Random(DateTime.UtcNow.Second);

                int RandomNumber = RandomClass.Next(10^(a-1), 10^a);
                Console.WriteLine(RandomNumber);
    }


    }

}

Что я пытаюсь добиться, так это то, что я хочу, чтобы пользователь вводил количество цифр в числе a и количество цифр в числе b

Затем программа сгенерирует случайное число, скажем, пользователь ввел 2 для a, затем программа должна сгенерировать числа от 0 до 10 (Случайное число, Каждый раз отличается)

если пользователь ввел 3 для a, то от 10 до 100,

То же самое для b, а затем для расчета продукта. Число не должно повторяться более 2 раз во время выполнения программы.

Хорошо, я изменил свой код на

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace MindTraining
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Enter the digits of first number ");
            int a=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter the digits of second number");
            int b = int.Parse(Console.ReadLine());

            Random RandomClass = new Random(DateTime.UtcNow.Second);
            double num1=Math.Pow(10,a-1);
            double num2=Math.Pow(a,1);
            int num3 = Convert.ToInt32( num1);
            int num4=Convert.ToInt32(num2);

            int RandomNumber = RandomClass.Next(num3,num4);
            Console.WriteLine(RandomNumber);
}}

// Но все равно не получаю результат, выкидываю ошибку,

Этот работал!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace MindTraining
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Enter the digits of first number ");
            int a=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter the digits of second number");
            int b = int.Parse(Console.ReadLine());

            Random RandomClass = new Random();
            double num1=Math.Pow(10,(a-1));
            double num2=Math.Pow(10,(a));
            int num3 = Convert.ToInt32( num1);
            int num4=Convert.ToInt32(num2);

            int RandomNumber = RandomClass.Next(num3,num4);
            Console.WriteLine(RandomNumber);
}


}






        }

Ответы [ 4 ]

1 голос
/ 12 ноября 2011

^ - это не повышение оператора мощности в c #.Для этого используйте Math.Pow .

1 голос
/ 12 ноября 2011

Оператор ^ в C # означает «исключающее или» (XOR), а не возведение в степень.Читайте об этом здесь: http://www.dotnetperls.com/xor.Попробуйте Math.Pow вместо.

0 голосов
/ 12 ноября 2011

При генерации TRULY случайного числа вы не можете предполагать, что число все время различается, надеюсь, вы поняли. Поэтому вам нужно дополнительно убедиться, что номер каждый раз отличается.

0 голосов
/ 12 ноября 2011

есть ли причина, по которой вы хотите использовать начальное значение, которое настолько ограничено?Почему бы не использовать

Random RandomClass = new Random();

, который принимает начальное значение по умолчанию для вашего объекта?

Кроме того, используйте Math.pow (base, exp) для расчета диапазона для вашего Random.next() вызывает как:

int RandomNumber = RandomClass.Next((int)Math.Pow(10,(a-1)), (int)Math.Pow(10,a));

В вашем коде ошибка возникает потому, что

double num2=Math.Pow(a,1);

возвращает само себя.Таким образом, ваше максимальное значение в Random.next () ниже вашего минимального значения, что логически неверно.Это ошибка, которую я получил при запуске вашего кода, за исключением того факта, что в конце вы пропускаете закрывающую скобку.

Кроме того, вы должны понимать, что не существует такого понятия, как совершенно случайныйгенератор чисел.Все это псевдослучайные генераторы.Они следуют нормальному распределению чисел на числовой линии.Таким образом, сказать, что число не будет сгенерировано более двух раз за одно выполнение, невозможно, если вы не сохраните все сгенерированные числа и продолжите проверять их.Это должно быть последним средством, только в случае суровых требований.

...