如何实现按指定百分比概率返回对应结果的自定义roll函数
按指定百分比概率返回结果的实现方案
原代码问题分析
原有实现存在两个核心逻辑错误:
- 概率判断逻辑和输入参数无关:
Random(Percent)会生成 0 到 Percent-1 之间的整数,固定判断数值是否等于 25 的逻辑完全不关联传入的百分比参数,自然无法实现按指定概率返回结果的需求 - 缺少随机种子初始化:Delphi 自带的随机函数如果不提前初始化种子,每次程序运行生成的随机序列是固定的,会导致概率结果完全失真
正确实现代码
// 注意:程序启动时全局调用1次Randomize初始化随机种子即可,不要放在本函数内重复调用 Function roll(Percent: Integer): string; var randVal: Integer; Begin randVal := Random(100); // 生成0~99的整数,共100个结果,每个数值对应1%的出现概率 If randVal < Percent then result := 'win' else result := 'lose'; End;
效果说明
- 调用
roll(60)时,随机值落在0~59区间的概率刚好为60%,符合需求 - 边界值自动兼容:传入0时100%返回lose,传入100时100%返回win,符合常规使用预期
内容的提问来源于stack exchange,提问作者Ouiji
相关产品推荐
相关产品推荐

