相关疑难解决方法(0)

随机数生成器仅生成一个随机数

我有以下功能:

//Function to get random number
public static int RandomNumber(int min, int max)
{
    Random random = new Random();
    return random.Next(min, max);
}
Run Code Online (Sandbox Code Playgroud)

我怎么称呼它:

byte[] mac = new byte[6];
for (int x = 0; x < 6; ++x)
    mac[x] = (byte)(Misc.RandomNumber((int)0xFFFF, (int)0xFFFFFF) % 256);
Run Code Online (Sandbox Code Playgroud)

如果我在运行时使用调试器执行该循环,则会得到不同的值(这就是我想要的).但是,如果我在该代码下面放置一个断点两行,则"mac"数组的所有成员都具有相同的值.

为什么会这样?

c# random

741
推荐指数
8
解决办法
17万
查看次数

在C#中禁用和启用按钮

我正在做一些相当简单的事情,我认为它会是.我想要的是当点击button1我希望它禁用button1并启用button2.我得到以下错误:错误1只能将赋值,调用,递增,递减和新对象表达式用作语句.

{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button3_Click(object sender, EventArgs e)
    {
        Close();

    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }
    private void RandomNumber(int min, int max)
    {
        int num = new Random().Next(min, max);
         label1.Text = num.ToString();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        RandomNumber(0,99);
        button2.Enabled == true ;
        if (textBox1.Text == label1.Text)
            MessageBox.Show("Winner");

    }

    private void label1_Click(object sender, EventArgs e)
    {

    }

    private void textBox1_TextChanged(object sender, EventArgs e) …
Run Code Online (Sandbox Code Playgroud)

c#

8
推荐指数
5
解决办法
16万
查看次数

随机数生成:如果我运行,在C#中返回相同的数字.好吧,如果调试一步一步

我在c#中生成随机数问题.如果我直接运行此表单应用程序,则随机数生成对所有人来说都是相同的.

如果我通过按F10逐行调试,那么它将生成不同的随机数.为什么会这样?我该怎么做才能生成不同的随机数?

Greyhound.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ADayAtTheRaces
{
    class Greyhound
    {
        int location=0;
        Random randomize = new Random();

        public int run()
        {
            location = randomize.Next(0, 100);
            return location;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Form1.cs的

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ADayAtTheRaces
{
    public partial class Form1 : Form
    {
        Greyhound[] greyHound = new Greyhound[4];
        ProgressBar[] progressBar = new ProgressBar[4]; …
Run Code Online (Sandbox Code Playgroud)

c#

5
推荐指数
1
解决办法
4676
查看次数

代码只有在使用调试器单步执行时才能正确运行?

可能重复:
随机数生成器仅生成一个随机数

不久前我对此感到有些困惑.我有以下代码:

public blockType generateRandomBlock()
{
    Random random = new Random();
    int makeBlockOfType = random.Next(0, 100);

    blockType t = blockType.normal;
    if (makeBlockOfType <= 80 && makeBlockOfType >= 60)
    {
        t = blockType.blue;
    }
    else if (makeBlockOfType > 80 && makeBlockOfType <= 95)
    {
        t = blockType.orange;
    }
    else if (makeBlockOfType > 95 && makeBlockOfType <= 100)
    {
        t = blockType.green;
    }

    return t;
}
Run Code Online (Sandbox Code Playgroud)

相当简单,它enum根据随机生成的数字(基于系统时间)返回一个值.不幸的是,由于一些奇怪的原因,我有所有的块都是一种颜色或另一种颜色,即使这是针对每个被放入游戏的块运行.但是,当我使用调试器逐步执行此操作,然后在运行一段时间后查看结果时,我发现块现在根据提供的机会多色.我对为什么会发生这种情况感到有些困惑.

为此,我使用MonoGame,它使用Mono编译器而不是Microsoft编译器.这可能是问题吗?我试图将此代码内联到构造函数中,从中调用它但我得到的结果相同(我猜测编译器无论如何都会内联代码).

我试图单独重启Visual Studio而不是让运行进行构建; 没有变化.

任何建议和帮助非常感谢!

c# mono xna monogame

5
推荐指数
2
解决办法
2182
查看次数

C#生成随机int - 之谜

我在生成随机整数时发现了一些有趣的东西(至少对我来说),我无法向自己解释,所以我想我会在这里发布.

我的需求很简单:我正在生成随机整数(Int32)ID,旨在最大限度地减少冲突.生成时间不是问题.

我已经尝试过这些方法来生成随机整数:

1.)

   return rnd.Next();
Run Code Online (Sandbox Code Playgroud)

其中rnd是Random类型的类字段,方法#3的种子.

2.)

   return rnd.Next(Int32.MinValue, Int32.MaxValue);
Run Code Online (Sandbox Code Playgroud)

其中rnd是类型为Random的类字段,种子来自方法#3.

3.)

   var buffer = new byte[sizeof(int)];
   using (var rng = new RNGCryptoServiceProvider())
   {
        rng.GetBytes(buffer);
   }            
   return BitConverter.ToInt32(buffer, 0);
Run Code Online (Sandbox Code Playgroud)

注意:我也尝试将RNGCryptoServiceProvider作为类字段在初始化容器类时初始化一次以简化GC的工作,但是我花了相同的时间来生成所以我认为这将是"更随机".

4)

   return new Random(Method3()).Next();
Run Code Online (Sandbox Code Playgroud)

5.)

   return new Random(Method3()).Next(Int32.MinValue, Int32.MaxValue);
Run Code Online (Sandbox Code Playgroud)

我知道,在每次调用时创建新的Random(int种子)非常耗时,但碰撞更少,对吧?

好吧,现在是神秘的一部分.我认为大多数碰撞都会有方法#1和#2,其中#1会稍微快一点,而且碰撞时间更短,碰撞最少的方法是#4和#5,其中#4会稍微快一点,而且方法## 3会有某种妥协.

所以我做了一个测试来证明我的假设.我使用所提到的每种方法生成了10倍(以使其平均)一百万个随机数,并获得了生成一百万个数字所需的平均碰撞次数和平均时间.结果(下面)对我来说有点意外.

结果:持续时间为小时:分钟:秒:毫秒格式

Method1: AvgCollisions: 235, AvgDuration: 00:00:00.3561967
Method2: AvgCollisions: 116, AvgDuration: 00:00:00.4042033
Method3: AvgCollisions: 115, AvgDuration: 00:00:04.6037259
Method4: AvgCollisions: 234, AvgDuration: 00:00:09.2195856
Method5: AvgCollisions: 233, AvgDuration: 00:00:09.1788223
Run Code Online (Sandbox Code Playgroud)

我再次进行了几次测试,它总是大致相同.

你也不奇怪吗?时间并不是我想象的那么多,但结果对我来说意味着,方法2是最好的生成随机数,因为它是最随机的,最快的,你可以设置一个最小和最大生成的数字.不知道Method2对Method3的预测程度有多大,因为我不知道如何测试它.

有人可以解释一下我做错了什么,或者为什么方法#4和#5没有碰撞最少,为什么碰撞的百分比总是一样的?它不应该是随机的吗?

编辑: 这是我已经完成的这个测试的Visual Studio 2010解决方案:http://bit.ly/nxLODw

c# random generator

3
推荐指数
1
解决办法
1022
查看次数

生成随机字母数字代码C#

我有一个方法可以随机生成字母数字组合.如果我在循环中调用它,它将返回相同的组合,但如果我放置一个断点GetVoucherNumber并逐步执行它,则每次都会生成一个不同的数字.你能解释一下为什么会这样,以及如何避免它?

码:

static void Main(string[] args)
{
    for (int i = 0; i < 100; i++)
        Console.WriteLine(GetVoucherNumber(6));

    Console.ReadLine();
}

public static string GetVoucherNumber(int length)
{
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    var random = new Random();
    var result = new string(
        Enumerable.Repeat(chars, length)
                  .Select(s => s[random.Next(s.Length)])
                  .ToArray());

    return result;
}
Run Code Online (Sandbox Code Playgroud)

c# .net-4.0

2
推荐指数
1
解决办法
1万
查看次数

c#Double.MinValue 和 Double.MaxValue 之间的随机数

我已经用谷歌搜索过了,但还没有答案。

所以问题是,我需要创建随机生成器 API 如下:

public static Double Range(Double minValue, Double maxValue)
{
     return random.NextDouble() * (maxValue - minValue) + minValue; // random is just System.Random
}
Run Code Online (Sandbox Code Playgroud)

一切正常,直到我将Double.MinValueDouble.MaxValue放入参数中,因为它生成“无限”无效双精度值(因为操作产生的值超出 64 位双精度值范围)。

有没有办法编写代码,以便即使使用Double.MinValueDouble.MaxValue也可以处理和生成有效的双精度值

c# random double min infinite

2
推荐指数
1
解决办法
71
查看次数

C#挑选随机字符串

我基本上只想在由'|'拆分的字符串中选择一个随机值.我找不到一个好的例子,有人有想法吗?

string[] mystrings = ("apple|orange|mayo|fruit|dog"):

string blah = "here i am "+resultsofrandom+" result chosen from mystring was " resultofrandom
Run Code Online (Sandbox Code Playgroud)

很明显,字符串blah只是一个例子,我只是希望从mystrings中随机选择的字符串返回一个新的字符串...

c#

1
推荐指数
2
解决办法
6026
查看次数

添加断点时,C#程序在文件中生成相同的输出

我想生成160个不同的随机用户和密码,现在当我在用户和密码变量(在for循环中)添加断点时,代码似乎工作正常.但是当我运行没有断点的代码时,Passwords.csv对所有160行都有相同的输出.任何帮助表示赞赏

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace WriteCSVPasswords
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"c:\temp\Passwords.csv";
            string user = null;
            string password = null;
            string[] file = new string[160];

            for (int i = 0; i < 160; i++)
            {
                user = CreatePassword(4);
                password = CreatePassword(5);
                file[i] = user + ";" + password + ";" + Base64Encode(user + ":" + password);
                user = null;
                password = null;
            }

            if …
Run Code Online (Sandbox Code Playgroud)

c#

1
推荐指数
1
解决办法
50
查看次数

在静态方法中生成随机值似乎缓存

我在静态类中有一个静态方法,它可以生成随机字符串,如下所示:

public static class DataGenerator
    {
        public static string GenerateRandomString(int length)
        {
            const string Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            var random = new Random();
            return new string(
                Enumerable.Repeat(Chars, length)
                    .Select(s => s[random.Next(s.Length)])
                    .ToArray());
        }
}
Run Code Online (Sandbox Code Playgroud)

当我从同一个调用函数多次调用此方法时,它似乎缓存生成的字符串.

以下是一个用法示例:

var item = new CodeDescActivePo()
                {
                    Active = true, 
                    Code = DataGenerator.GenerateRandomString(10), 
                    Description = DataGenerator.GenerateRandomString(10)
                };
Run Code Online (Sandbox Code Playgroud)

请注意,有两个对GenerateRandomString的调用,我希望有两个唯一的随机数,在这种情况下,代码和描述总是相同的.

为什么GenerateRandomString每次都不会生成一个新的随机数?

c#

-1
推荐指数
1
解决办法
608
查看次数

标签 统计

c# ×10

random ×3

.net-4.0 ×1

double ×1

generator ×1

infinite ×1

min ×1

mono ×1

monogame ×1

xna ×1