The simplest way is to produce a collection (e.g. an array) of the numbers 1-15, and then shuffle it. (EDIT: By "collection of the numbers 1-15" I mean 1, 2, 3, 4, 5... 15. Not a collection of random numbers in the range 1-15. If I'd meant that, I'd have said so :)
You haven't given details of which platform you're on so we can't easily give sample code, but I'm a big fan of the modern variant of the Fisher-Yates shuffle. For example, in C#:
public static void Shuffle<T>(IList<T> collection, Random rng)
{
for (int i = collection.Count - 1; i > 0; i--)
{
int randomIndex = rng.Next(i + 1);
T tmp = collection[i];
collection[i] = collection[randomIndex];
collection[randomIndex] = tmp;
}
}
If you want to produce "more random" numbers (e.g. 15 distinct integers within the entire range of integers available to you) then it's probably easiest just to do something like this (again, C# but should be easy to port):
HashSet<int> numbers = new HashSet<int>();
while (numbers.Count < 15)
{
numbers.Add(rng.Next());
}
List<int> list = numbers.ToList();
// Now shuffle as before
The shuffling at the end is to make sure that any ordering which might come out of the set implementation doesn't affect the final result.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…