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(" TrueForAll(EndsWithSaurus): {0}", dinosaurs.TrueForAll(EndsWithSaurus)); Console.WriteLine(" Find(EndsWithSaurus): {0}", dinosaurs.Find(EndsWithSaurus)); Console.WriteLine(" FindLast(EndsWithSaurus): {0}", dinosaurs.FindLast(EndsWithSaurus)); Console.WriteLine(" FindAll(EndsWithSaurus):"); List<string> sublist = dinosaurs.FindAll(EndsWithSaurus); foreach(string dinosaur in sublist) { Console.WriteLine(dinosaur); } Console.WriteLine( " {0} elements removed by RemoveAll(EndsWithSaurus).", dinosaurs.RemoveAll(EndsWithSaurus)); Console.WriteLine(" List now contains:"); foreach(string dinosaur in dinosaurs) { Console.WriteLine(dinosaur); } Console.WriteLine(" Exists(EndsWithSaurus): {0}", dinosaurs.Exists(EndsWithSaurus));
//改写
Console.WriteLine("
Exists(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"); } }
循环遍历到真就返回了。