向数组中添加随机数和非递归数
本文关键字:递归 随机数 数组 添加 | 更新日期: 2023-09-27 18:27:24
如何将数字添加到数组中,使每个新数字都是随机的且不重复出现的?
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
const int NUM_ROWS = 5;
const int NUM_COLS = 7;
static void Main(string[] args)
{
List<List<int>> matrix = new List<List<int>>();
RandInt randNumbers = new RandInt(NUM_ROWS * NUM_COLS);
int count = 0;
for (int row = 0; row < NUM_ROWS; row++)
{
List<int> newRow = new List<int>();
matrix.Add(newRow);
for (int col = 0; col < NUM_COLS; col++)
{
newRow.Add(RandInt.numbers[count++].number);
}
}
}
public class RandInt
{
public static List<RandInt> numbers = new List<RandInt>();
public int number { get; set; }
public int rand { get; set; }
public RandInt() { }
public RandInt(int SIZE)
{
Random r = new Random();
for (int i = 0; i < SIZE; i++)
{
numbers.Add(new RandInt() { number = i, rand = r.Next()});
}
numbers = numbers.OrderBy(x => x.rand).ToList();
}
}
}
}
您可以使用内置的Random
类生成随机数,并使用数组函数Contains
检查生成的数字是否已经在数组中。在下面的例子中,我生成一个新的数字,直到我找到一个还不在数组中的数字,然后添加它
Random rand = new Random();
int[] intArray = new int[100];
for (int i = 0; i < 100; i++)
{
int next = 0;
while (intArray.Contains(next = rand.Next())) { }
intArray[i] = next;
}
注意:这种方法的一个缺点是,它可能是不终止的,因为它可以无限次地产生与数组中已经存在的数字相同的数字。然而,对于这类事情的大多数应用程序,我怀疑这会是一个问题。