创建随机数据C#

时间:2015-10-12 11:22:34

标签: c# random numbers

我正在尝试创建一个心跳监视器,并需要一些虚假信息来输入我的程序以检查它是否有效。

我的程序的一个要求是,如果心率整数低于某个数字,就会发出警报。

然而我遇到的问题是,如果心率在发出警报之前降至最低心率整数以下,然后再次直接反弹,那不是警报的测试,请参阅伪代码:

If heart_rate < 60:
    Count = Count + 1
If heart _rate > 60:
     Reset Count variable 
If Count = 10:
     Set off alarm

因此,我需要生成数据,模拟心率降至60以下(患者死亡)。 最快捷的方法是创建一个程序读取的列表或文本文件来模拟情况,还是有一种时髦的方式可以模拟可以引发警报的随机数,并且一旦警报响起就会保持在整数范围内出发?

很抱歉,如果这听起来很混乱,我是一个python程序员,不得不用C#编程。

3 个答案:

答案 0 :(得分:1)

你的问题是一个&#34;数据流测试&#34;一。手动生成数据流并不是我个人所特有的,因为&#34;快速&#34; (甚至&#34;理智&#34; ......)。您要么获得现有数据集,要么生成它(但不能手动生成,除非它是相对较少的数据点:20~30)。

话虽如此,你需要测试一些东西,这意味着你需要知道当一个目标病例(心率低于60)时,你的系统正确地捕获了&#34;异常&#34;。反过来,这意味着您需要知道它发生的位置,即确切的时刻。

我的建议是:自动生成一个数据集,其中包含&#34; normal&#34;值。在不同的时间点(即数据流中的位置)手动插入&#34;异常&#34;值(59),具有不同的频率,以查看系统是否重置计数器(少于10次)或是否发出警报(至少10次)。

然后您将拥有以下初始数据流:

  80 78 78 81 80 81 ... 75 76 80 // say 100 values ("data points")
// 0  1  2  3  4  5     97 98 99 -> indices ("time points")

如果您插入&#34;误报警&#34; (80 78 59 59 78)例如,您知道系统应该重置counter。你会对&#34;闹钟做同样的事情&#34 ;;你应该知道应该提高警报的索引(时间点)。

编辑:关于&#34;手动&#34;的部分插入目标值应解释为&#34;凭经验选择填充了随机数据的数组(或列表)的索引,其中应插入数据&#34;。

答案 1 :(得分:0)

尝试此操作:您可能希望将rand.Next(min,max)更改为使用正常范围的心跳或您想要查看心跳值的任何范围。

public class Program
{
    public void Main(string[] args)
    {
        Random rand = new Random();
        bool flag = true;
        int count = 0;
        while (flag)
        {

            if(count==10)
            {
                Console.WriteLine ("dead");
                flag = false;
                break;
            }
            Thread.Sleep(1000);
            var heart_rate = rand.Next(50,70);
            Console.WriteLine (heart_rate);
            if (heart_rate < 60)
            {
                count++;
            }
            else if(heart_rate > 60)
            {
                count=0;
            }
        }
    }
}

答案 2 :(得分:0)

public static class HeartrateGenerator
{
    static Random random = new Random();

    public static IEnumerable<int> GenerateHeartrate(
        int totalSequenceLength,
        int dropsBelow60After, 
        int bouncesBackAfter = -1)
    {
        // NOTE: check input data

        int i = 0;

        // return values > 60
        while (i < dropsBelow60After)
        {
            i++;
            yield return 60 + random.Next() % 60;
        }

        if (bouncesBackAfter > 0)
            // return values < 60
            while (i < bouncesBackAfter)
            {
                i++;
                yield return random.Next() % 60; 
            }

        // return normal values again
        while (i < totalSequenceLength)
        {
            i++;
            yield return 60 + random.Next() % 60;
        }
    }
}

示例用法:

HeartrateGenerator.GenerateHeartrate(100, 20, 28);