using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace List
{
class Program
{
static void Main(string[] args)
{
var list = Getint();
foreach (var item in list)
{
Console.WriteLine(item.ToString());
}
Console.ReadKey();
}
static Random rd = new Random();
public static List<int> Getint()
{
List<int> list = new List<int>();
while (true)
{
// Random rd = new Random();
int id =rd.Next(0, 1111);
if (list.Count != 0)
{
if (!list.Contains(id))
{
list.Add(id);
}
}
else
{
list.Add(id);
}
if (list.Count>3)
{
break;
}
}
return list;
}
}
}
以上的代码很简单。
两个Random放在不同的位置,产生的不同的随机值相等几率是不同的。在循环外头的生成的相同概率是比较小的。
这里的问题在于它是一个伪随机,并非一个真随机数。
随机数的选择是从随机种子开始的,默认的随机种子很容易生成相同的随机数。
当循环的速度快时,每次都去new了一个相同的随机值的概率是很大的。
之前认为,每new一个,这样产生的随机值应该是不一样的,但是由于伪随机的原因,结果一堆一样的随机值出现了。
还有那个Exists的用法也是很奇怪了,因为我只是int类型,并未使用复杂的结构体。尝试过多个写法,但是未能实现功能。最后还是只能用Contains
if (list.Exists(x => x != id))
{
list.Add(id);
}//不行
using System;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
List<string> dinosaurs = new List<string>();
dinosaurs.Add("Compsognathus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Oviraptor");
dinosaurs.Add("Velociraptor");
dinosaurs.Add("Deinonychus");
dinosaurs.Add("Dilophosaurus");
dinosaurs.Add("Gallimimus");
dinosaurs.Add("Triceratops");
Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}
Console.WriteLine("\nTrueForAll(EndsWithSaurus): {0}",
dinosaurs.TrueForAll(EndsWithSaurus));
Console.WriteLine("\nFind(EndsWithSaurus): {0}",
dinosaurs.Find(EndsWithSaurus));
Console.WriteLine("\nFindLast(EndsWithSaurus): {0}",
dinosaurs.FindLast(EndsWithSaurus));
Console.WriteLine("\nFindAll(EndsWithSaurus):");
List<string> sublist = dinosaurs.FindAll(EndsWithSaurus);
foreach(string dinosaur in sublist)
{
Console.WriteLine(dinosaur);
}
Console.WriteLine(
"\n{0} elements removed by RemoveAll(EndsWithSaurus).",
dinosaurs.RemoveAll(EndsWithSaurus));
Console.WriteLine("\nList now contains:");
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}
Console.WriteLine("\nExists(EndsWithSaurus): {0}",
dinosaurs.Exists(EndsWithSaurus));
//改写
Console.WriteLine("\nExists(EndsWithSaurus): {0}",
dinosaurs.Exists((s) =>{ return s.ToLower().EndsWith("saurus"); }));
}
// Search predicate returns true if a string ends in "saurus".
private static bool EndsWithSaurus(String s)
{
return s.ToLower().EndsWith("saurus");
}
}
循环遍历到真就返回了。