Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

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

Код:


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 в 16:22.
Insider1 вне форума   Ответить с цитированием
Старый 28.12.2017, 16:38   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,354
Репутация: 5274
По умолчанию

Цитата:
Сообщение от 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 в 16:42.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 28.12.2017, 16:43   #3
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,275
Репутация: 2054

icq: 216409213
По умолчанию

А ведь даже в офф справке все описано:
Цитата:
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, 16:46   #4
Insider1
Новичок
 
Регистрация: 13.04.2017
Сообщений: 3
Репутация: 10
По умолчанию

Спасибо
Insider1 вне форума   Ответить с цитированием
Старый 28.12.2017, 17:17   #5
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,432
Репутация: 885

skype: aleksandr.gryb
По умолчанию

Вынесите обявление рандома в глобальный раздел
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рандом выдает одинаковые значения. 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 01:34
Перетаскивание значения одного поля в другое inret Общие вопросы Delphi 3 09.05.2008 15:26
Всегда позади и всегда впереди в одном приложении Legat Win Api 4 27.10.2007 15:48


02:17.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru