所以,这是交易。
我已经为 wp7 设置了一个应用程序,其中有一个包含 50 个引号的数组。当用户单击按钮时,会显示数组中的随机引号。问题是,引号总是以相同的顺序出现。例如,引号为 1-50。顺序始终为 2、4、20、31、10... 有办法解决这个问题吗?我希望每次使用该应用程序时都会出现随机且不同的报价。
代码如下:
string[] listaCantadas;
Random r1, r2;
public MainPage()
{
InitializeComponent();
listaCantadas = new string[]
{"//set of quotes
};
r1 = new Random(100);
r2 = new Random(r1.Next(0, 50));
}
//click event for display a random quote
int Cantada = r2.Next(0, listaCantadas.Length - 1);
txtBlockCantada.Text = listaCantadas[Cantada];
});
}
最佳答案
您使用 Random(100)
创建您的第一个 Random
实例,即常量种子。所以它总是会返回相同的序列。这反过来意味着 Random
的第二个实例的种子也将是常量,它返回的所有值也是如此。
只需使用默认构造函数创建 Random
的单个实例,即 new Random()
。这是随时间播种的,因此在程序的不同运行之间可能会有所不同。
警告:由于时间仅每隔几毫秒更改一次(在典型的 Windows 计算机上为 1-16 毫秒),如果您使用默认构造函数快速连续创建多个 Random
实例,它们很可能都会返回相同的顺序。
另一个常见的陷阱是 Random
不是线程安全的。但看起来你不会遇到这个问题。
string[] listaCantadas;
Random r;//No need for more than one instance
public MainPage()
{
InitializeComponent();
listaCantadas = new string[]
{"//set of quotes
};
r = new Random();
}
//click event for display a random quote
int Cantada = r.Next(0, listaCantadas.Length - 1);
txtBlockCantada.Text = listaCantadas[Cantada];
});
}
关于c# - 随机不是那么随机,在 Windows Phone 7 上有随机类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7661166/