两个随机类返回相同的值

时间:2015-11-05 03:55:39

标签: c# random

我试图创建包含int和string的随机字符串。下面是我如何得到随机字符串和int的类。

151105 11:17:35 INFO  (FrameworkServlet.java:488) FrameworkServlet 'rest': initialization started
151105 11:17:35 INFO  (AbstractApplicationContext.java:573) Refreshing WebApplicationContext for namespace 'rest-servlet': startup date [Thu Nov 05 11:17:35 CST 2015]; parent: Root WebApplicationContext
151105 11:17:35 INFO  (AutowiredAnnotationBeanPostProcessor.java:153) JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
151105 11:17:35 INFO  (FrameworkServlet.java:507) FrameworkServlet 'rest': initialization completed in 42 ms

这是我设置这些类以获取随机字符串的方式。

private int RandomNumber1(int min, int max)
    {
        Random random = new Random();
        return random.Next(min, max);
    }
    private int RandomNumber2(int min, int max)
    {
        Random random = new Random();
        return random.Next(min, max);
    }
    private string RandomStringSatu(int size, bool uppercase)
    {
        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);
        }
        if (uppercase)
        return builder.ToString().ToUpper();
        return builder.ToString();
    }

    private string RandomStringDua(int size, bool uppercase)
    {
        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);
        }
        if (uppercase)
            return builder.ToString().ToUpper();
        return builder.ToString();
    }

这是我得到的结果: Result

在图片上可以看到前两个字符与最后两个字符具有相同的值。

现在,问题是我应该怎么做,如果我想得到不同的特征。 因此,输出应该看起来像&#34; D2B1&#34;

由于

3 个答案:

答案 0 :(得分:1)

如果您将Random random = new Random();行从RandomNumber1RandomNumber2移到全局到方法之外,请使用RandomNumber1RandomNumber2中的该rundom字段方法结果将是不同的。

Thanx Jamaxack

答案 1 :(得分:0)

使用此stackoverflow question

的答案

您正在寻找创建新实例时的种子。

Random random = new Random(Guid.NewGuid().GetHashCode());

答案 2 :(得分:0)

在创建Random()实例时生成不同的种子值以生成不同的值。在此处查看文档https://msdn.microsoft.com/en-us/library/ctssatww%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396