我正在尝试生成10个唯一的随机数并将其保存到数组中。
这是我的代码,但有运行时错误,但我不知道如何。
有人能帮助我吗?
static void Main(string[] args)
{
int [] generatedNum = new int[10];
bool duplicated;
int tempo;
Random random = new Random();
// Create first number
generatedNum[0] = random.Next(1, 25);
for (int i = 1; i < 10; i++)
{
tempo = random.Next(0, 25);
do
{
duplicated = false;
foreach (int x in generatedNum)
{
if (x == tempo)
duplicated = true;
}
if (duplicated == true)
tempo = random.Next(0, 25);
} while (duplicated == true);
// Save unique number to array
generatedNum[i] = tempo;
}
// To check the number saved
foreach (int i in generatedNum)
{
Console.WriteLine("{0}", generatedNum[i]);
}
}
答案 0 :(得分:1)
这可能会有所帮助:
public List<int> GetNumber()
{
Random random = new Random();
List<int> values = new List<int>();
values.Add(random.Next(0, 25));
while (values.Count < 10)
{
int newValue;
do
{
newValue = random.Next(0, 25);
} while (values.Contains(newValue));
values.Add(newValue);
}
return values;
}
答案 1 :(得分:1)
要从y数组中获取x个唯一项,您需要shuffle bag。
你把你的数字1-25放在一个袋子里,洗牌然后拿下前10个项目。您现在将在1&amp;之间有10个随机项目。 25。
答案 2 :(得分:0)
您的上一个foreach
循环无效。 i
是值,而不是索引,因此您可以直接编写它:
// To check the number saved
foreach (int i in generatedNum)
{
Console.WriteLine("{0}", i);
}
答案 3 :(得分:0)
更改强>
foreach (int i in generatedNum)
{
Console.WriteLine("{0}", generatedNum[i]);
}
到
for (int j=0;j<generatedNum.Length;j++)
{
Console.WriteLine("{0}", generatedNum[j]);
}
答案 4 :(得分:0)
static void Main(string[] args)
{
var generatedNum = new List<int>();
var random = new Random();
while (generatedNum.Count < 10)
{
var tempo = random.Next(0, 25);
if (generatedNum.Contains(tempo)) continue;
generatedNum.Add(tempo);
}
foreach (var i in generatedNum)
{
Console.WriteLine("{0}", i);
}
}
你问题在这里没有?
// To check the number saved
foreach (int i in generatedNum)
{
Console.WriteLine("{0}", generatedNum[i]);
}
答案 5 :(得分:0)
这会有效吗
如果您被允许使用Linq,您可以尝试这样的事情
您可以设置所需的范围
Random rnd = new Random();
var randomNumbers = Enumerable.Range(1, 100)
.Select(x => new { val = x, order = rnd.Next() })
.OrderBy(i => i.order)
.Select(x => x.val)
.Take(10).ToArray();
答案 6 :(得分:0)
/ *试试这个,我使用了一个arraylist来存储数字
using System;
using System.Collections;
public class SamplesArrayList
{
public static void Main()
{
// Creates and initializes a new ArrayList.
ArrayList values = new ArrayList();
Random random = new Random();
values.Add(random.Next(0, 25));
while (values.Count < 10)
{
int newValue;
do
{
newValue = random.Next(0, 25);
} while (values.Contains(newValue));
values.Add(newValue);
}
PrintValues(values);
}
public static void PrintValues(IEnumerable myList)
{
foreach (Object obj in myList)
Console.Write(" {0}", obj);
Console.WriteLine(myList);
}
}