持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
一、前言
前文请细看:基于C#语言Windows窗体应用(.Net Framework)的教室点名系统V1.0
今天加个功能,老师想要把某个别同学的点名概率提上来,这要咋整。
简单,安排!
二、原理简述
- 提高指定同学的点名概率,那么就增加权重即可
- 默认权重1(默认空,即1),通过修改权重值,就可以间接的提高指定同学的点名概率
- 如下图,在原本的学生名单中,增加格式
:XX
- 在解析学生名单时,查询到
:XXX
,则代表有XX个该学生参与随机点名- 如下图的张三,原本没有
:10
,则张三被随机点名的概率是1/3 - 如今,增加了
:10
,则张三被随机点名的概率是10/(10+2)=10/12
- 如下图的张三,原本没有
张三:10
李四
王五
复制代码
三、源码详解
- 每行遍历
- 每行人名中是否存在
:
- 如果存在,则接着解析
:
后面的数字N
,则添加N
个name
到nameList
- 如果不存在,则添加一个
name
到nameList
- 如果存在,则接着解析
- 因为程序在随机点名的时候,会随机在nameList里面抽选,那么如果nameList里面张三的名字越多,被抽中的概率也越多。
private void getNameList(string path)
{
StreamReader streamReader = new StreamReader(path, Encoding.UTF8);
string content;
string str = "";
nameList.Clear();
while ((content = streamReader.ReadLine()) != null)
{
//Console.WriteLine(content.ToString());
string name = content.ToString();
int index = content.IndexOf(':');
if (index!=-1)
{
name = content.Substring(0, index);
string number = content.Substring(index+1, content.Length-index-1);
int num = Convert.ToInt32(number, 10);
for(int i=1; i<num; i++)
{
nameList.Add(name);
}
}
nameList.Add(name);
str += (name + "、");
}
streamReader.Close();
str = str.Substring(0, str.Length-1);
nameListLabel.Text = str;
}
复制代码
private void randomBtn_Click(object sender, EventArgs e)
{
//Random rd = new Random(); //无参即为使用系统时钟为种子
int rd = new Random().Next(0, nameList.Count);
nameLabel.Text = nameList[rd];
}
复制代码
四、效果展示
~~稍后传~~~
操作太简单了,我就不录视频了~
觉得好,就一键三连呗(点赞+收藏+关注)