我想生成1到16之间的随机数,但是一旦生成该数,我就希望它不能在矩阵中再次生成。我找不到解决办法,所以谢谢您的帮助!
实现此目的的一种非常简单的方法是生成所有数字,对其进行洗牌,然后仅用它们填充矩阵。
Random rng = new Random(); // System.Random
List<(double random, int value)> values = new List<(double random, int value)>(); // list for shuffling
for ( int i = 0; i < 16; i++ ) {
values.Add( ( rng.NextDouble(), i + 1 ) ); // random position and the value
}
values.Sort( ( a, b ) => b.random - a.random ); // sort using the random position. Note : Sort is a System.Linq extension method
int[,] matrix = new int[4,4];
for ( int i = 0; i < values.length; i++ ) {
matrix[ i % 4, i / 4 ] = values[ i ].value; // populate the matrix
// i % 4 just loops i between 0 and 3
// i / 4 divides i by 4 and rounds DOWN, ie. increases by 1 each 4
}
如何保证矩阵中没有重复值?
填充其的列表中没有重复的值。循环生成1..16作为值,并生成一些随机数作为顺序。
这是一个有趣的方法。如果随机位置出现重复(机会很小)怎么办?排序只会将值并排放置,对吗?
是的,然后它们将以与原始列表相同的顺序出现。