C# 如何使用for loop&;用唯一的随机数填充数组;如果声明?
我试图用随机但唯一的数字填充一维数组(没有一个数字应该是相同的)。我想我在第二个for循环中有一个逻辑错误,但不能正确地得到它 另外,我并不是在寻找一个更“复杂”的解决方案——我现在所知道的是,如果。 P.P.S我知道这是一个真正的初学者问题,我为这种问题感到抱歉C# 如何使用for loop&;用唯一的随机数填充数组;如果声明?,c#,arrays,for-loop,if-statement,random,C#,Arrays,For Loop,If Statement,Random,我试图用随机但唯一的数字填充一维数组(没有一个数字应该是相同的)。我想我在第二个for循环中有一个逻辑错误,但不能正确地得到它 另外,我并不是在寻找一个更“复杂”的解决方案——我现在所知道的是,如果。 P.P.S我知道这是一个真正的初学者问题,我为这种问题感到抱歉 int[] x = new int[10]; for (int i = 0; i < x.Length; i++) { x[i] = r.Next(9);
int[] x = new int[10];
for (int i = 0; i < x.Length; i++)
{
x[i] = r.Next(9);
for (int j = 0; j <i; j++)
{
if (x[i] == x[j]) break;
}
}
for (int i = 0; i < x.Length; i++)
{
Console.WriteLine(x[i);
}
int[]x=新的int[10];
对于(int i=0;i 对于(intj=0;j,这里有一个代码解决方案
int[] x = new int[10];
for (int i = 0; i < x.Length;)
{
bool stop = false;
x[i] = r.Next(9);
for (int j = 0; j <i; j++)
{
if (x[i] == x[j]) {
stop = true;
break;
}
}
if (!stop)
i++;
}
for (int i = 0; i < x.Length; i++)
{
Console.WriteLine(x[i]);
}
int[]x=新的int[10];
对于(int i=0;i 对于(int j=0;j而言,典型的解决方案是按顺序生成整个电位集(在本例中是一个值为0到9的数组)。然后对序列进行洗牌
private static Random rng=new Random();
公共静态无效洗牌(int[]项)
{
int n=列表长度;
而(n>1){
n--;
int k=下一个(n+1);
int temp=项目[k];
项目[k]=项目[n];
项目[n]=温度;
}
}
静态void Main(字符串[]参数)
{
int[]x=新的int[10];
对于(int i=0;i您可以简单地执行以下操作:
private void AddUniqueNumber()
{
Random r = new Random();
List<int> uniqueList = new List<int>();
int num = 0, count = 10;
for (int i = 0; i < count; i++)
{
num = r.Next(count);
if (!uniqueList.Contains(num))
uniqueList.Add(num);
}
}
Or:
int[] x = new int[10];
Random r1 = new Random();
int num = 0;
for (int i = 0; i < x.Length; i++)
{
num = r1.Next(10);
x[num] = num;
}
private void AddUniqueNumber()
{
随机r=新随机();
List uniqueList=新列表();
int num=0,count=10;
for(int i=0;i
对发布代码的简单跟踪可以揭示一些问题。具体来说,在线
if (x[i] == x[j]) break;
如果数组中的随机数“已经”存在,那么只要打破j
循环,就会将当前i
值跳过到x
数组中。这意味着无论何时发现重复,x[i]都将是默认值的0(零),然后跳过
外部i
循环显然在x
int
数组中循环,这非常清楚,看起来还可以。但是,第二个内部循环不可能是for
循环的,这就是为什么…基本上你需要找到一个随机的int
,然后循环现有的int
,看看是否它已经存在。考虑到这一点,理论上你可以多次抓取同一个随机数,然后才能得到唯一的随机数。因此,在这种情况下……你真的不知道在找到唯一的随机数之前会循环多少次
话虽如此,它可能有助于“解决”您的问题。我猜与x
数组中现有的int
相比,有一种“方法”返回一个“唯一的”int
,可能会派上用场。创建一个无休止的循环,在这个循环中,我们将获取一个随机数,然后通过“existing”ints
。如果随机数不是重复的,那么我们可以简单地返回此值。这就是此方法所做的一切,它可能如下所示
private static int GetNextInt(Random r, int[] x, int numberOfRandsFound) {
int currentRand;
bool itemAlreadyExist = false;
while (true) {
currentRand = r.Next(RandomNumberSize);
itemAlreadyExist = false;
for (int i = 0; i < numberOfRandsFound; i++) {
if (x[i] == currentRand) {
itemAlreadyExist = true;
break;
}
}
if (!itemAlreadyExist) {
return currentRand;
}
}
}
最后,正如其他人所提到的,使用列表
static int DataSize;
static int RandomNumberSize;
static void Main(string[] args) {
Random random = new Random();
DataSize = 10;
RandomNumberSize = 10;
List<int> listOfInts = new List<int>();
bool stillWorking = true;
int currentRand;
while (stillWorking) {
currentRand = random.Next(RandomNumberSize);
if (!listOfInts.Contains(currentRand)) {
listOfInts.Add(currentRand);
if (listOfInts.Count == DataSize)
stillWorking = false;
}
}
for (int i = 0; i < listOfInts.Count; i++) {
Console.WriteLine(i + " - " + listOfInts[i]);
}
Console.ReadKey();
}
static int-DataSize;
静态整数随机化;
静态void Main(字符串[]参数){
随机=新随机();
数据大小=10;
随机数化=10;
List LISTOFITS=新列表();
bool-stillWorking=true;
国际货币基金组织;
当(仍在工作){
currentRand=random.Next(随机数化);
如果(!listOfInts.Contains(currentRand)){
添加列表(currentRand);
if(listofits.Count==DataSize)
仍然工作=错误;
}
}
for(int i=0;i
希望这有帮助;-)OP不需要更复杂的解决方案,这是给初学者的:-)它仍然不起作用。如果rng滚动重复的数字,答案中的第一个版本将无法填充整个数组,第二个选项不检查以确保项目是唯一的,也可能留下未分配的元素。只是好奇为什么必须在这里使用for循环和if语句?在解决方案中它们不是必需的。r.Next(9)
只返回0-8范围内的数字(比参数小一个)。您需要将Next
调用更改为r.Next(10)
返回0-9之间的数字。老实说,我正在学习一本在线教材。因此我正在练习与这些特定操作员合作。希望我能有像你这样的导师!谢谢,这对我帮助很大。
static int DataSize;
static int RandomNumberSize;
static void Main(string[] args) {
Random random = new Random();
DataSize = 10;
RandomNumberSize = 10;
int numberOfRandsFound = 0;
int[] ArrayOfInts = new int[DataSize];
int currentRand;
for (int i = 0; i < ArrayOfInts.Length; i++) {
currentRand = GetNextInt(random, ArrayOfInts, numberOfRandsFound);
ArrayOfInts[i] = currentRand;
numberOfRandsFound++;
}
for (int i = 0; i < ArrayOfInts.Length; i++) {
Console.WriteLine(ArrayOfInts[i]);
}
Console.ReadKey();
}
static int DataSize;
static int RandomNumberSize;
static void Main(string[] args) {
Random random = new Random();
DataSize = 10;
RandomNumberSize = 10;
List<int> listOfInts = new List<int>();
bool stillWorking = true;
int currentRand;
while (stillWorking) {
currentRand = random.Next(RandomNumberSize);
if (!listOfInts.Contains(currentRand)) {
listOfInts.Add(currentRand);
if (listOfInts.Count == DataSize)
stillWorking = false;
}
}
for (int i = 0; i < listOfInts.Count; i++) {
Console.WriteLine(i + " - " + listOfInts[i]);
}
Console.ReadKey();
}