C# – 生成最多3位数的随机用户名有时会产生4位数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# – 生成最多3位数的随机用户名有时会产生4位数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1634字,纯文字阅读大概需要3分钟。
内容图文
![C# – 生成最多3位数的随机用户名有时会产生4位数](/upload/InfoBanner/zyjiaocheng/757/5de68e5b1d284fcfa9778594becc54fe.jpg)
我必须编写方法来生成随机用户名,其中包含8个字符,由小写字母和最多3个数字组成.所以我写了以下方法:
public string UsernameGenerator()
{
const string letters = "abcdefghijklmnopqrstuvwxyz";
const string digits = "0123456789";
var builder = new StringBuilder();
Random random = new Random((int)DateTime.Now.Ticks);
int numberOfNumerics = random.Next(0, 4);
for (int i = 0; i < 8; i++)
{
var l = letters[random.Next(0, letters.Length)];
builder.Append(l);
}
for (int i = 0; i < numberOfNumerics; i++)
{
int replaceIndex = random.Next(0, 8);
var d = digits[random.Next(0, digits.Length)];
builder.Replace(builder[replaceIndex],d);
}
return builder.ToString();
}
但是,它会不时生成包含4位数的用户名.我的numberOfNumerics变量是random.Next(0,4),根据文档它应该从0到3返回随机数.看起来额外的数字是已经使用的数字之一的副本,并且它经常被放在彼此旁边.错误生成密码的一些示例:
ko90w09q, qs2b22m6, yh38wa88, x66uvf36
是的,改变random.Next(0,4); to random.Next(0,3);有点解决问题,因为它会不时生成3位数的用户名,但这对我来说是间接的解决方案.任何帮助赞赏!
解决方法:
该错误不是由Random.Next引起的,因为你循环只有3个数字,即使Next可以返回4,因为你的循环条件i< numberOfNumerics.所以这是正确的. 错误是由错误的逻辑引起的.你用:
builder.Replace(builder[replaceIndex],d);
用您的数字替换所有出现的字母.你想用:
builder[replaceIndex] = d;
但是您应该存储已经替换的索引,否则您可以替换相同的索引:
var replacedIndexes = new HashSet<int>();
for (int i = 0; i < numberOfNumerics; i++)
{
int replaceIndex = random.Next(0, builder.Length);
while (!replacedIndexes.Add(replaceIndex))
replaceIndex = random.Next(0, builder.Length);
char d = digits[random.Next(0, digits.Length)];
builder[replaceIndex] = d;
}
内容总结
以上是互联网集市为您收集整理的C# – 生成最多3位数的随机用户名有时会产生4位数全部内容,希望文章能够帮你解决C# – 生成最多3位数的随机用户名有时会产生4位数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。