2013-07-22 5 views
0

У меня есть два массива, называемые номерами и звуками. Мой код ниже. Когда я использую случайный генератор, я не хочу, чтобы одно и то же значение было присвоено массиву звуков. звуки [0], звуки [1], звуки [3] должны иметь разные значения все время. БлагодаряC# присвоение различных значений массиву со случайным генератором

string[] numbers ={ "1", "2", "3", "4", "5", "6", "7","8","9","10","11","12","13","14","15","16","17","18","19","20"}; 

Random r= new Random(); 

sounds[0] = numbers[r.Next(0, numbers.Count())]; 

sounds[1] = numbers[r.Next(0, numbers.Count())]; 

sounds[2] = numbers[r.Next(0, numbers.Count())]; 
+0

В чем проблема? Или то, что он генерирует сейчас –

+0

На самом деле не получается, какие номера целей служат, вы можете просто использовать r.Next (1, 20) – Sayse

+0

Когда я скомпилирую программу, значения звуков [0], звуков [1], звучат [ 3] может быть одинаковым. Например, звуки [0] = 5, звуки [1] = 5, звуки [3] = 20. звуки [0] и звуки [1] имеют здесь одно и то же значение. Я хочу, чтобы они были разными значениями. – user2569038

ответ

0

Если вы хотите простой подход и производительность не является проблемой, вы можете преобразовать массив в список и удалить каждый элемент, как это принято:

string[] numbers ={ "1", "2", "3", "4", "5", "6", "7","8","9","10","11","12","13","14","15","16","17","18","19","20"}; 

List<string> remaining = new List<string>(numbers); 

Random r = new Random(); 

for (int i = 0; i < 3; ++i) 
{ 
    int n = r.Next(0, remaining.Count); 
    sounds[i] = remaining[n]; 
    remaining.RemoveAt(n); 
} 
+0

спасибо, что это работает – user2569038

0

Вот довольно простой/наивный ответ, который может дать вам некоторые идеи. Обратите внимание, что вы, вероятно, должны использовать .Length, а не .Count(), так как .Length - это операция O (1), и у вас уже есть свойство. Это решение не масштабируется, если sounds больше. Если это так, вам нужно перетасовать массив чисел. Тем не менее, это даст вам три уникальных значения.

string[] numbers = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20" }; 
string[] sounds = new string[3]; 
Random r = new Random(); 

//get the first one, this one will always be unique 
sounds[0] = numbers[r.Next(0, numbers.Length)]; 
//set the second equal to the first, so that it will enter the while loop. 
sounds[1] = sounds[0]; 
while (sounds[1] == sounds[0]) //repeats until it gets a unique value 
    sounds[1] = numbers[r.Next(0, numbers.Length)]; 
sounds[2] = sounds[0]; 
while (sounds[2] == sounds[1] || sounds[2] == sounds[0]) //works the same as previous, except it checks for both 
    sounds[2] = numbers[r.Next(0, numbers.Length)]; 
+0

спасибо, что это работает – user2569038

Смежные вопросы