假设我有一个Windows窗体的代码,当您按下按钮时会生成问候语。
string[] Greetings = new string[] { "Hi", "Hello", "Howdy!", "Hey" };
string[] Smilies = new string[] {";)", ":)", "=)", ":-)" };
Random rand = new Random();
string Greet = Greetings[rand.Next(0, Greetings.Length)];
string Smile = Smilies[rand.Next(0, Smilies.Length)];
TextBox.Text = Greet + " " + Smile;
Clipboard.SetText(TextBox.Text);
如果我想添加概率为X%的表情符号,该怎么办?所以它们不会一直出现,但我有机会在代码中设置?有什么好办法吗?
我想到了这样的事情 -
public void chance (string source, int probability)
{
Random chanceStorage = new Random();
if (probability >= chanceStorage.Next(0, 100))
TextBox.Text = source;
}
然后
TextBox.Text = Greet;
chance("_" + Smile, X);
这是最佳的吗?
答案 0 :(得分:2)
string[] Greetings = new string[] { "Hi", "Hello", "Howdy!", "Hey" };
string[] Smilies = new string[] {";)", ":)", "=)", ":-)" };
Random rand = new Random();
string Greet = Greetings[rand.Next(0, Greetings.Length)];
string Smile = rand.NextDouble() > 0.5 ? " "+Smilies[rand.Next(0, Smilies.Length)] : string.Empty;
TextBox.Text = Greet + Smile;
答案 1 :(得分:0)
我只是生成一个0,1(包括0)和random.NextDouble()
之间的随机双精度。然后你可以检查概率(作为0到1之间的值)是否小于生成的数字。
例如
double chance = 0.35; //35%
bool createSmiley = rand.NextDouble() < chance;
这不一定完全精确(因为浮点数的精度有限)但会让你非常接近。并且允许比仅使用ints
作为随机数更精确。
A demo of the random generation of smileys。
另一方面,我会重构你的代码以更好地隔离逻辑。我个人只是尝试操作单个字符串,并在完成所有字符串处理后设置.Text
属性。
答案 2 :(得分:0)
我会根据您的概率划分您的Smilies数组的长度,以生成一系列随机数。
4个表情符号/ 25%概率= 16.所以你的随机发生器会产生一个0到15的随机数,有25%的几率使用笑脸。如果生成的数字超出了数组的范围,请不要使用笑脸。
using System;
public class Program
{
public static void Main()
{
Random rand = new Random();
double percentage = rand.NextDouble();
string[] greetings = new[] { "Hi", "Hello", "Howdy!", "Hey" };
string[] smilies = new[] { ";)", ":)", "=)", ":-)" };
// Get a greeting
string greet = greetings[rand.Next(0, greetings.Length)];
// Generate the smiley index using the probablity percentage
int randomIndex = rand.Next(0, (int)(smilies.Length / percentage));
// Get a smiley if the generated index is within the bound of the smilies array
string smile = randomIndex < smilies.Length ? smilies[randomIndex] : String.Empty;
Console.WriteLine("{0} {1}", greet, smile);
}
}
请参阅此处的工作示例... https://dotnetfiddle.net/lmN5aP