我已经开发了一个随机字符串生成器,但它的行为并不像我希望的那样.我的目标是能够运行两次并生成两个不同的四个字符随机字符串.但是,它只生成一个四字符随机字符串两次.
这是代码和输出的示例:
private string RandomString(int size)
{
StringBuilder builder = new StringBuilder();
Random random = new Random();
char ch;
for (int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
return builder.ToString();
}
// get 1st random string
string Rand1 = RandomString(4);
// get 2nd random string
string Rand2 = RandomString(4);
// create full rand string
string docNum = Rand1 + "-" + Rand2;
Run Code Online (Sandbox Code Playgroud)
......输出看起来像这样:UNTE-UNTE ......但看起来应该像UNTE-FWNU
如何确保两个明显随机的字符串?
我在Coding Horror上读过一篇关于各种shuffle算法的文章.我已经看到人们已经在某个地方对列表进行了洗牌:
var r = new Random();
var shuffled = ordered.OrderBy(x => r.Next());
Run Code Online (Sandbox Code Playgroud)
这是一个很好的shuffle算法吗?它是如何工作的?这样做是否可以接受?
我在静态类中的静态方法中有以下代码:
Random r = new Random();
int randomNumber = r.Next(1,100);
Run Code Online (Sandbox Code Playgroud)
我在循环中有这个,我一直都这样randomNumber!
这里有什么建议?
我需要.NET中的唯一标识符(不能使用GUID,因为它对于这种情况来说太长了).
人们认为这里使用的算法是一个很好的候选人还是你有其他建议吗?
这真的很奇怪,我不明白为什么会这样.在foreach循环中,我正在迭代A类集合,并且对于每个类,我调用Count()方法,其中r1和r2数字是从范围[-1,1]生成的.问题是 Random.Next为每个实例返回相同的"随机"数字.当第一个实例的结果为0和-1时,将从以下实例返回相同的结果.拜托,你能告诉我为什么会这样吗?另外,我在每个A类实例中都得不到不同的结果.这是代码:
class a
{
Random rnd = new Random();
private void Count()
{
int r1 = rnd.Next(-1, 1);
int r2 = rnd.Next(-1, 1);
}
}
class b
{
List<a> listofA=new list<a>();
foreach (a ACLASS in listofA)
{
ACLASS.Count();
}
}
Run Code Online (Sandbox Code Playgroud) 编辑:这不是重复,它不是对如何使用随机数生成器的天真误解的结果.谢谢.
我似乎在System.Random类生成的数字中发现了重复模式.我正在使用"主"Random实例为第二个"主"Random实例生成种子.此主要Random实例生成的值显示重复模式.特别是,产生的第3个数字是非常可预测的.
下面的程序演示了这个问题.请注意,每次循环使用不同的种子值.
using System;
class Program
{
static void Main(string[] args)
{
// repeat experiment with different master RNGs
for (int iMaster = 0; iMaster < 30; ++iMaster)
{
// create master RNG
var rngMaster = new Random(iMaster + OFFSET);
// obtain seed from master RNG
var seed = rngMaster.Next();
// create main RNG from seed
var rngMain = new Random(seed);
// print 3rd number generated by main RNG
var ignore0 = rngMain.Next(LIMIT);
var ignore1 = rngMain.Next(LIMIT);
var randomNumber …Run Code Online (Sandbox Code Playgroud) 可能重复:
随机数生成器仅生成一个随机数
一个初学者的问题.我有一个非常简单的程序,它绘制一条线,我想随机化位置,但每次我创建一个新的Random实例时,它返回相同的值.问题出在哪儿?谢谢.
private void Draw()
{
Random random1 = new Random();
int randomNumber1 = random1.Next(0, 300);
Random random2 = new Random();
int randomNumber2 = random2.Next(0, 300);
Random random3 = new Random();
int randomNumber3 = random3.Next(0, 300);
Random random4 = new Random();
int randomNumber4 = random4.Next(0, 300);
System.Drawing.Graphics g = this.CreateGraphics();
Pen green = new Pen(Color.Green, 5);
g.DrawLine(green, new Point(randomNumber1, randomNumber2),
new Point(randomNumber3, randomNumber4));
}
private void btndraw1_Click(object sender, EventArgs e)
{
Draw();
}
Run Code Online (Sandbox Code Playgroud) 我已经搜索了一段时间并且一直在努力寻找这个,我正在尝试生成几个随机的,唯一的数字是C#.我正在使用System.Random,我正在使用DateTime.Now.Ticks种子:
public Random a = new Random(DateTime.Now.Ticks.GetHashCode());
private void NewNumber()
{
MyNumber = a.Next(0, 10);
}
Run Code Online (Sandbox Code Playgroud)
我NewNumber()经常打电话,但问题是我经常会重复数字.有些人建议因为我每次都是随机声明它,它不会产生随机数,所以我把声明放在我的函数之外.有什么建议或比使用更好的方法System.Random?谢谢
为什么我需要创建一个Random类的实例,如果我想创建1到100之间的随机数....就像
Random rand = new Random();
rand.Next(1,100);
Run Code Online (Sandbox Code Playgroud)
Random类是否有任何静态函数来做同样的事情?喜欢...
Random.Next(1,100);
Run Code Online (Sandbox Code Playgroud)
我不想不必要地创建一个实例