如何生成c#中有3个字母和6个数字的随机字母数字数组?
我试图生成一个由3个字母和6个数字组成的随机字母数字数组。整个数组必须是随机的。我能想到的唯一方法是生成两个单独的随机数组,然后将它们合并并随机化合并的数组。任何帮助都将不胜感激。我特别需要关于确保存储正确数量的变量类型的帮助。这是我的半工作代码:如何生成c#中有3个字母和6个数字的随机字母数字数组?,c#,arrays,random,C#,Arrays,Random,我试图生成一个由3个字母和6个数字组成的随机字母数字数组。整个数组必须是随机的。我能想到的唯一方法是生成两个单独的随机数组,然后将它们合并并随机化合并的数组。任何帮助都将不胜感激。我特别需要关于确保存储正确数量的变量类型的帮助。这是我的半工作代码: static void Main(string[] args) { var alphabetic = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var numeric = "01234567
static void Main(string[] args)
{
var alphabetic = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var numeric = "0123456789";
var stringChars = new char[9];
var random = new Random();
for (int i = 0; i < 3; i++)
{
stringChars[i] = alphabetic[random.Next(alphabetic.Length)];
}
for(int i = 3; i< stringChars.Length; i++)
{
stringChars[i] = numeric[random.Next(numeric.Length)];
}
var ranChars = new char[9];
var semisorted = new String(stringChars);
for (int i=0; i< ranChars.Length; i++)
{
ranChars[i] = semisorted[random.Next(semisorted.Length)];
}
var final = new string(ranChars);
Console.WriteLine("{0}", final);
Console.ReadLine();
}
static void Main(字符串[]args)
{
var alphatic=“abcdefghijklmnopqrstuvxyz”;
var numeric=“0123456789”;
var stringChars=新字符[9];
var random=新的random();
对于(int i=0;i<3;i++)
{
stringChars[i]=字母[random.Next(字母长度)];
}
for(int i=3;i
你很接近了。但这里的问题是,您从“半排序”数组中随机选择,而此时真正需要的是选择一个随机排列。其中一种方法是使用一个
因此,将其与您已经运行的代码结合起来:(未经测试)
for(int i=0;i<3;i++)
{
stringChars[i]=字母[random.Next(字母长度)];
}
for(int i=3;i1)
{
int k=random.Next(n--);
char temp=stringChars[n];
stringChars[n]=stringChars[k];
stringChars[k]=温度;
}
字符串结果=新字符串(stringChars);
哈罗德的答案是更简洁,但这里有另一种方法来解释整个“编程中做同样事情的100种方法”的概念。[编辑:Doh,我颠倒了数字和字母的数量。这里有一个修正:]
public static void Main(string[] args)
{
var random = new Random();
var finalString = string.Empty;
var finalArray = new string[9];
for (var i = 0; i < 3; i++)
{
var alphabet = random.Next(0, 26);
var letter = (char) ('a' + alphabet);
finalArray[i] = letter.ToString().ToUpper();
}
for (var i = 3; i < 9; i++)
{
var number = random.Next(0, 9);
finalArray[i] = number.ToString();
}
var shuffleArray = finalArray.OrderBy(x => random.Next()).ToArray();
for (var i = 0; i < finalArray.Length; i++)
{
finalString += shuffleArray[i];
}
Console.WriteLine(finalString);
Console.ReadKey();
}
publicstaticvoidmain(字符串[]args)
{
var random=新的random();
var finalString=string.Empty;
var finalArray=新字符串[9];
对于(变量i=0;i<3;i++)
{
var字母=随机。下一个(0,26);
变量字母=(字符)('a'+字母表);
finalArray[i]=letter.ToString().ToUpper();
}
对于(变量i=3;i<9;i++)
{
变量数=随机数。下一个(0,9);
finalArray[i]=number.ToString();
}
var shufflarray=finalArray.OrderBy(x=>random.Next()).ToArray();
对于(变量i=0;i
可能重复@RionWilliams我不同意,这次有字母和数字的具体计数,这需要一个非常不同的技术公平点。我对此持怀疑态度,虽然在这条线索中有很多技巧,但我不相信有任何封面特定数量的角色。我已经撤回了投票结果,没有提到结果中是否可以重复字符和数字。你想要组合还是排列?这闻起来像是我的家庭作业。因为我没有意识到我留下了测试的剩余部分,所以再次清理。这不是很明显,但这种洗牌方式偏向于将项目保留在原始顺序。这不是一个很大的影响,因为随机性的范围很大。但是假设你有random。下一步(2)
,你正在洗牌一个包含2项的列表。OrderBy是稳定的,因此3/4的结果(对于随机数)使其给出原始顺序。对于Next(3)
它是6/9,依此类推,直到((2^31+1)选择2)/(2^31^2)大约0.50000000023。超过2的列表显然有类似的问题,但是思维实验更难。伟大的洞察力和一些我没有考虑到的,但却是一个非常有效的观点。我感谢您的反馈!
public static void Main(string[] args)
{
var random = new Random();
var finalString = string.Empty;
var finalArray = new string[9];
for (var i = 0; i < 3; i++)
{
var alphabet = random.Next(0, 26);
var letter = (char) ('a' + alphabet);
finalArray[i] = letter.ToString().ToUpper();
}
for (var i = 3; i < 9; i++)
{
var number = random.Next(0, 9);
finalArray[i] = number.ToString();
}
var shuffleArray = finalArray.OrderBy(x => random.Next()).ToArray();
for (var i = 0; i < finalArray.Length; i++)
{
finalString += shuffleArray[i];
}
Console.WriteLine(finalString);
Console.ReadKey();
}