如何用C#从一个定义好的(arr.length=33)数组里随机的输出里面的六个数(整形)(不重复)?

高手帮忙,给点代码和注释,谢谢!

Random rdm = new Random();
//6个元素的返回值的数组
string[] rtnValue = new string[5];

//循环6次,给返回值数组赋值
for (int i = 0; i < 6; i++)
{
int rdmIndex=0; //随机序号
bool hasIn = true; //检测随机序号是否存在的变量

while (hasIn)
{
rdmIndex = rdm.Next(0, 32);

//已存在标记为假
hasIn = false;

//根据已读取的数来循环比较
for (int i2 = 0; i2 <= i; i2++)
{
if (rtnValue[i2]==arr[rdmIndex])
{
//如果随机抽取的数是已存在的数,已存在标记为真
hasIn = true;
break;
}
}
}
rtnValue[i]=arr[rdmIndex];
}
//执行这段代码前要确定arr里面至少有6个或6个以上不同的值,如果arr里面没有6个不重复的值,则会死循环。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-23
至一楼,C#中数组不可改变大小,所以不存在Remove,也不能改变Length。
建议楼主把数组改为List,操作会很方便。
Random ran = new RadnDom();
//将数组转换成List
List<int> listArr = arr.ToList<int>();
List<int> result = new List<int>();
//循环插入数值
for(int i=0;i<6;i++)
{
//随机获取一个数
int index= ran.Next(0,listArr.Count-1);
//将这个数存入结果List中
result.Add(listArr[index]);
//删除已经取过的数
listArr.RemoveAt(index);
}
第2个回答  2012-06-22
Random ran = new RadnDom();
string strResult=string.Empty;
//循环六次
for(int i=0;i<6;i++)
{
//随机获取一个数
int index= ran.Next(0,arr.lenght-1);
strResult+=arr[index].ToString();
//将获取得到的那个数从移除
arr.Remove(index);
}

不记得 int 数组有没有移除这个方法了
如果没有的话
就用循环移除
for(int i=index;i<arr.Length;i++)
{
arr[i]=arr[i+1];
arr.lenght=arrLenght-1;
}本回答被网友采纳
第3个回答  2021-01-24
static Random random = new Random();
private static int[] CreateRandom()
{
int[] arr=new int[33];
for (int i = 0; i < 6; )
{
int n = random.Next(1, 34);
if(Array.IndexOf(arr,n)<0)//索引判断是否重复,小于0即不重复
arr[i++] = n;
}

return arr;
}
private static void Main()
{
int[] array = CreateRandom();
foreach (float item in array)
{
Console.WriteLine(item);
}
}
相似回答