相关疑难解决方法(0)

如何按给定百分比创建概率?

我正在尝试为游戏创建基于百分比的概率.例如,如果某个项目的爆击几率为45%,则必须表示其中的45次命中率至关重要.

首先,我尝试使用一个简单的解决方案:

R = new Random();
int C = R.Next(1, 101);
if (C <= ProbabilityPercent) DoSomething()
Run Code Online (Sandbox Code Playgroud)

但是在100次迭代中,例如有48%的可能性,它在100分中给出40-52.同样适用于49,50,51.因此,这些"百分比"之间没有区别.

问题是如何设置例如50的百分比,并严格地随机获得50的100? 对于罕见项目查找的概率而言,有机会增加查找项目的机会是非常重要的.所以1%的buff会很敏感,因为现在不是.

对不起,我的英语不好.

c# probability probability-theory

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

范围之间的随机日期时间 - 不统一输出

我实现了下面的RandomDate,但我总是让值关闭到"从"日期,我可能会错过这里的东西....

public static DateTime GetRandomDate(DateTime from, DateTime to)
    {
        var range = new TimeSpan(to.Ticks - from.Ticks);

        var rnd = new Random();

        var randTimeSpan = new TimeSpan((long)(range.TotalSeconds - rnd.Next(0, (int)range.TotalSeconds))); 

        return from + randTimeSpan;
    }
Run Code Online (Sandbox Code Playgroud)

c# random datetime timespan

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

避免泛型函数中的范围问题

我来自PHP和Javascript的Wild Wild West,您可以从函数返回任何内容.虽然我不喜欢缺乏问责制,但我在努力保持代码"完美"方面也遇到了新的挑战.

我制作了这个通用函数来从列表中选择一个随机元素

public static T PickRandom<T>(this IList<T> list) {
    Random random = new Random();
    int rnd = random.Next(list.Count);
    return list[rnd];
}
Run Code Online (Sandbox Code Playgroud)

但我想保护自己不要在0值列表中使用它.显然我不能从T以外的函数返回任何东西,例如false或-1.我当然可以这样做

if(myList.Count > 0)
   foo = Utilites.PickRandom(myList);
Run Code Online (Sandbox Code Playgroud)

然而,在C#中有很多疯狂的事情我不知道,对于这个应用程序,我正在创建我非常,经常必须从列表中选择一个可以在其Count中不断递减的随机元素.有没有更好的办法?

c# generics

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

为什么这个方法每次都返回相同的随机字符串?

我需要创建一个独特的块来测试我正在处理的不同项目.

所以我创建了一个简单的程序来生成一个X长度的随机字符串.

问题是,如果我调用它一次,我得到一个随机字符串,如果我再次调用它(例如在for循环中)我得到相同的字符串用于循环的整个执行.

我有一种感觉,它被缓存或者其他东西,但我不知道.net做到了这一点,我只是在这一点上感到困惑.

调用代码:

    StreamWriter SW = new StreamWriter("c:\\test.txt");
    int x = 100;
    while (x >0)
    {
        SW.WriteLine(RandomString(20));
        x--;
    }
Run Code Online (Sandbox Code Playgroud)

这是方法:

private static string RandomString(int Length)
{
    StringBuilder sb = new StringBuilder();
    Random randomNumber = new Random();

    for (int i = 0; i <= Length; ++i)
    {
        int x = randomNumber.Next(65, 122);
        sb.Append(Convert.ToChar(x));
    }
    return sb.ToString();        
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

"VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
..................
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB
VEWMCQ`Fw]TvSFQawYnoB"
Run Code Online (Sandbox Code Playgroud)

那么是什么让我觉得Random.next()会一直返回一个新的随机数?

.net c# random text char

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

asp.net mvc c#随机生成相同的数字

如何生成不同的数字,它生成相同的数字

Random rand = new Random(100000);
rand.Next();
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc

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

随机不是随机的

我使用Random来生成一个随机数序列.我只构造一次随机对象,然后在循环内生成随机值(其中300个).问题是,一旦我获得了所有的值并对它们进行了排序,我就会发现它们中的一些是相同的和/或顺序的:我生成的数字从0到50000.

这是我的脚本:

Random rnd = new Random();
for (int n=0; n < 300; n++)
{
    int RndNumber = rnd.Next(0, 50000);
    System.Threading.Thread.Sleep(3);
}
Run Code Online (Sandbox Code Playgroud)

有人可以知道为什么会发生这种情况,我该如何改进它以使其更随机?

.net c# random

5
推荐指数
3
解决办法
7475
查看次数

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

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

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

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#头实验室.我在程序中遇到了一个问题,那就是狗的速度相同.我无法弄清楚他们为什么会这样做,因为在我看来,每个对象实例都会在其X位置添加一个随机的1到5个像素.这种随机性应该足以产生差异.

所以,因为我不想发布我的整套实验室1类,我重新创建了一个小型独立版本,只有两只狗赛车,没有下注方面.

Form1.Designer包含: - 两个带有猎犬的图片框.-a开始按钮

Greyhound.cs类:

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

namespace test
{
    public class Greyhound
    {
        public int DogID;
        public PictureBox myPictureBox;
        public Point StartingPosition;
        public Point CurrentPosition;
        public Random Randomizer;

        public bool Run()
        {
            int AddDistance = Randomizer.Next(1, 7);
            CurrentPosition.X += AddDistance;
            myPictureBox.Location = CurrentPosition;

            if (CurrentPosition.X > 600)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public void ReturnToStart()
        {
            CurrentPosition = StartingPosition;
            myPictureBox.Location = StartingPosition;
        } …
Run Code Online (Sandbox Code Playgroud)

c# random performance

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

C#代码仅在使用调试器时有效吗?

所以这是我一直在使用的代码.它只是一个简单的程序来测试3个随机生成的数字是按升序还是降序排列.出于某种原因,如果我使用调试器并踩到每一行,那么代码就能正常工作.如果没有,那么它表示数字是100%的顺序或100%的顺序,这不应该是这种情况.

这是我一直在使用的代码:

        int num1;
        int num2;
        int num3;

        int yes = 0;
        int no = 0;

        for (int i = 0; i <= 99; i++)
        {

            Random rnd = new Random();

            num1 = rnd.Next(1, 11);
            num2 = rnd.Next(1, 11);
            num3 = rnd.Next(1, 11);

            if ( ((num1 <= num2) && (num2 <= num3)) || ((num1 >= num2) && (num2 >= num3)) )
            {
                yes += 1;
            }

            else
            {
                no += 1;
            }

        }


        Console.WriteLine("The Number are in ascending order " …
Run Code Online (Sandbox Code Playgroud)

c# random

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

C#随机代码 - 大部分都是错误的吗?

随机化列表我遇到了很多问题.我在谈论一个包含200个元素的列表,我希望将其列入清单.不要误会我的意思,我读了很多例子,乍一看有很好的东西,比如:

随机化List <T>

但根据我的经验,至少在快速机器上,这基本上是毫无价值的.改组运行得如此之快,以至于两次调用Random.NEXT()之间没有MS延迟,导致几乎不随机的行为.

我不是在谈论超级安全的东西,只是随机的基本游戏.我知道我可以添加1 MS的延迟,但这意味着"浪费"200 MS只是随机化一个列表.

现在我找到了这种方法:http://www.codinghorror.com/blog/2007/12/shuffling.html

看起来不错,使用GUID进行排序.但他们不是以同样的方式创造的吗?让我们提高一个档次,让我们假设我要创建1000个数字,介于0 - 5之间.这段代码基本没用:

        var resultA = new List<int>();
        for (int i = 0; i < 1000; i++)
        {
            resultA.Add(new Random().Next(5));
        }


        var resultB = new List<int>();
        for (int i = 0; i < 1000; i++)
        {
            resultB.Add(new Random().Next(5));
            Thread.Sleep(1);
        }
Run Code Online (Sandbox Code Playgroud)

A根本不起作用,至少不是我在Windows Phone 7中的环境.B很好,但它需要一秒钟,这也是愚蠢的.任何评论或想法,创建随机的整数列表都不是那么难:-)

c# random windows-phone-7

4
推荐指数
2
解决办法
2176
查看次数