Проблема с переменной Random C#

Компьютеры программирование программы C# .net

public static void MatrixFiller(int[] FArray, int[] SArray)
{
Random rnd = new Random();
for (int i = 0; i < FArray.Length; i++)
{
FArray[i] = rnd.Next(300);
}
for (int i = 0; i < SArray.Length; i++)
{
SArray[i] = rnd.Next(300);
}
}

Предположим, что первый массив длиной 3, а второй 5.
После выполнения данного метода получается такая ситуация:

Первый метод: 205 205 205
Второй метод: 205 205 205 205 205 (число 205 взято рандомно мною)

Всегда оба массива заполнены одинаковыми числами. В чем беда?

Примечание:
Прим. ООП как такового у нас не было;

Как решить эту проблему? Ведь по сути мы обращаемся к методу 1 раз, соответственно переменная rnd объявляется 1 раз. А позже в циклах берутся именно rnd.Next() ;

Примечание:
В своё время был совет вытащить объявление переменной rnd в метод Main.
Но тогда придётся в теле метода MatrixFiller каждый круг цикла запрашивать значение rnd с Main?
Ответы:
Ты не освоил ООП. В ЛЮБОМ языке new Random будет вызывать начальное значение. Random создаётся один раз и забирается следующий псевдослучайный результат по rnd.Next();
Я сказал же что ошибся по поводу new. У тебя массив - локальные переменные которые создаются, инициализируются копией твоих массивов и уничтожаются после выхода из функции - смысл второй части. Передавать надо ссылку на массив или возвращать их в результат объединяя раком(т.к. результат только один).
Проблема не в этом методе!
int[] a = new int[3], b = new int[5];
MatrixFiller(a, b);
foreach(int n in a) Console.Write(n + " ");
Console.WriteLine();
foreach (int n in b) Console.Write(n + " ");
Console.WriteLine();
// Output:
// 173 17 108
// 79 298 101 120 95
// где числа всегда разные


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.