在 PTT 的 Visual_Basic 板上看到的問題。希望能依照 A, B, C 三個項目設定的機率出現。
有點像廣告依權重出現,剛好最近在學習 ASP.NET,就來練習一下,若有更好的寫法歡迎討論哦。
第一種寫法:將項目出現的機率,直接產生於一字串中,最後再從該字串中隨機印出一個字元。
string str = new string(Convert.ToChar("A"), 33) + new string(Convert.ToChar("B"), 37) + new string(Convert.ToChar("C"), 30);
Random rnd = new Random();
Response.Write(str.Substring(rnd.Next(0, 99),1));
第二種寫法:參考廣告依權重露出的程式寫法。
Page_Load()
Random r = new Random();
for (int i = 1; i <= 20; i++)
{
Response.Write(GetRnd(r));
}
protected string GetRnd(Random rnd)
{
string[] ad = new string[3];
ad[0] = "A";
ad[1] = "B";
ad[2] = "C";
int[] impressions = new int[3];
impressions[0] = 33;
impressions[1] = 37;
impressions[2] = 30;
int total = 0;
for (int i = 0; i < impressions.Length; i++)
{
total += impressions[i];
}
int rnd_num = rnd.Next(1, total);
string final = "";
total = 0;
for (int i = 0; i < impressions.Length; i++)
{
total += impressions[i];
if (rnd_num <= total)
{
final = ad[i];
break;
}
}
return final;
}