Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2017, 15:16   #1
Insider1
 
Регистрация: 13.04.2017
Сообщений: 3
По умолчанию Рандом всегда начинает с одного значения

Вот такой код всегда выдает одинкаовые строки, а нужно, чтобы вообще все числа были разные.

Код:

using System;
					
public class Program
{
	public static void Main()
	{
		for(int i = 0; i < 10; i++) {
			setRandom();
			Console.WriteLine();
		}
	}
	
	public static void setRandom()
	{
		Random rand = new Random();
		
		for(int i = 0; i < 10; i++) {
			Console.Write(rand.Next(0, 11) + " ");
		}
	}
}
Вот, что он выдает:

10 7 5 0 1 8 6 0 0 3
10 7 5 0 1 8 6 0 0 3
10 7 5 0 1 8 6 0 0 3
10 7 5 0 1 8 6 0 0 3
10 7 5 0 1 8 6 0 0 3
10 7 5 0 1 8 6 0 0 3
10 7 5 0 1 8 6 0 0 3
10 7 5 0 1 8 6 0 0 3
10 7 5 0 1 8 6 0 0 3
10 7 5 0 1 8 6 0 0 3

То есть как инициализировать всегда по разному "new Random()", если оно вызывается всегда одной и той же функцией?

P.S. не хотелось бы инициализировать Random (в данном случае) в static void Main() и передавать его как параметр в setRandom(), потому что метод setRandom() должен все делать сам

Последний раз редактировалось Insider1; 28.12.2017 в 15:22.
Insider1 вне форума Ответить с цитированием
Старый 28.12.2017, 15:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Insider1 Посмотреть сообщение
То есть как инициализировать всегда по разному "new Random()", если оно вызывается всегда одной и той же функцией?
так не вызывайте new Random() в цикле и всё будет хорошо.

Цитата:
Сообщение от Insider1 Посмотреть сообщение
Не хотелось бы инициализировать Random (в данном случае) в static void Main() и передавать его как параметр в setRandom(), потому что метод setRandom() должен все делать сам
причина?

ну, StackOverflow для таких извращённых ситуаций рекомендует такой код:
Код:
Random rand = new Random(Guid.NewGuid().GetHashCode());

Последний раз редактировалось Serge_Bliznykov; 28.12.2017 в 15:42.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.12.2017, 15:43   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А ведь даже в офф справке все описано:
Цитата:
Avoiding multiple instantiations
Initializing two random number generators in a tight loop or in rapid succession creates two random number generators that can produce identical sequences of random numbers. In most cases, this is not the developer's intent and can lead to performance issues, because instantiating and initializing a random number generator is a relatively expensive process.

Both to improve performance and to avoid inadvertently creating separate random number generators that generate identical numeric sequences, we recommend that you create one Random object to generate many random numbers over time, instead of creating new Random objects to generate one random number.

However, the Random class isn't thread safe. If you call Random methods from multiple threads, follow the guidelines discussed in the next section.
p51x вне форума Ответить с цитированием
Старый 28.12.2017, 15:46   #4
Insider1
 
Регистрация: 13.04.2017
Сообщений: 3
По умолчанию

Спасибо
Insider1 вне форума Ответить с цитированием
Старый 28.12.2017, 16:17   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Вынесите обявление рандома в глобальный раздел
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рандом выдает одинаковые значения. WizarD.89 Общие вопросы C/C++ 3 22.12.2011 18:44
Замена одного значения на другое alexsampler Microsoft Office Excel 3 08.12.2011 13:09
Перевод с одного значения в другое в С++ 2008 atlon Общие вопросы C/C++ 11 11.01.2009 00:34
Перетаскивание значения одного поля в другое inret Общие вопросы Delphi 3 09.05.2008 15:26
Всегда позади и всегда впереди в одном приложении Legat Win Api 4 27.10.2007 15:48