用随机函数产生不重复的5个数字

dali_yan 2012-11-23 11:51:47
从数字0-4中产生五个不重复的五个数字,返回一个int数组。我的代码如下:

public int[] assignrole()
{

int[] role = new int[5];//用作返回随机产生的数
int i = 1;
Random rd = new Random();//产生随机数
role[0]=rd.Next(4);//产生第一个随机数
while( i < role.Length)
{
role[i] = rd.Next(4);
if (i == 1)
{
if (role[0] != role[1])//判断第一个随机数和第二个产生的随机数是否相等
{
i++;//不相等则进入下一个随机数
}
else
{
continue;
}
}
if (i == 2)
{

if (role[0] != role[2] && role[1] != role[2])
{

i++;
}
else
{
continue;

}

}
if (i == 3)
{

if (role[0] != role[3] && role[1] != role[3] && role[2]!=role[3])
{

i++;
}
else
{

continue;
}

}
if (i == 4)
{

if (role[0] != role[4] && role[1] != role[4] && role[2]!= role[4] && role[3]!=role[4])
{
i++;
}
else
{

continue;

}

}

}

return role;

}

上面前四个能够生成四个不同的随机数,可是最后一个由于只能生成一个特定的数,程序卡在最后一个if语句中,怎么也生成不了地五个数,不知道大家有什么方法解决,注意只能是在0-4中,不能扩大随机数的范围。
...全文
672 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
维秀斯丢丢 2012-11-26
  • 打赏
  • 举报
回复
rd.Next(5)
维秀斯丢丢 2012-11-26
  • 打赏
  • 举报
回复
[b][b][b]rd.Next(4+1)[/b][/b][/b]
huwei001982 2012-11-26
  • 打赏
  • 举报
回复
看了楼主的代码,我哭了
classfun 2012-11-26
  • 打赏
  • 举报
回复
引用 13 楼 classfun 的回复:
List<int> list = (new int[5] { 0, 1, 2, 3, 4 }).ToList<int>(); int[] role = new int[5]; Random rand = new Random((int)DateTime.Now.Ticks); for (int ……
有一个错误啊。 应该这样才对 List<int> list = (new int[5] { 0, 1, 2, 3, 4 }).ToList<int>(); int[] role = new int[5]; Random rand = new Random((int)DateTime.Now.Ticks); for (int i = 0; i < 5; i++) { int index = rand.Next(0, list.Count);// role[i] = list[index]; list.RemoveAt(index); }
classfun 2012-11-26
  • 打赏
  • 举报
回复
List<int> list = (new int[5] { 0, 1, 2, 3, 4 }).ToList<int>(); int[] role = new int[5]; Random rand = new Random((int)DateTime.Now.Ticks); for (int i = 0; i < 5; i++) { int index = rand.Next(0, 5); role[i] = list[index]; list.RemoveAt(index); }
ygr489451752 2012-11-25
  • 打赏
  • 举报
回复
我是菜鸟 正好学习一下
  • 打赏
  • 举报
回复
引用 10 楼 QQ81867376 的回复:
大家回答的很好,特别是Linq . int[] result = Enumerable.Range(0, 5).OrderBy(x => Guid.NewGuid()).ToArray(); 可是不给出原因他下次还是会这样的。
写出OrderBy(x => Guid.NewGuid())这本身就是一种解释。只不过lz可能还是看不懂而已。
言多必失 2012-11-25
  • 打赏
  • 举报
回复
大家回答的很好,特别是Linq . int[] result = Enumerable.Range(0, 5).OrderBy(x => Guid.NewGuid()).ToArray(); 可是不给出原因他下次还是会这样的。 你只需要在你自己的基础上该一下 ,应该就没有问题。
引用 楼主 ITbailei 的回复:
public int[] assignrole() { int[] role = new int[5];//用作返回随机产生的数 int i = 1; Random rd = new Random();//产生随机数 role[0]=rd.Next(4);//产生第一个随机数 while( i < role.Length) { role[0]=rd.Next(4);//产生第一个随机数 if (i == 1)
role[0]=rd.Next(5);//产生第一个随机数 包括开始,不包括结尾。 如果让我评价你的方法,真是太垃圾了,感觉是刚刚学习一样的,像楼上其他人学习。 C#的特点是什么,大量封装的方法, 效率比你写的强多了。 按照你的意思写的,仅仅是按照你的思路去实现。 public static int[] assignrole2() { int[] role = new int[5]; //用作返回随机产生的数 int i = 1; Random rd = new Random();//产生随机数 role[0] = rd.Next(5);//产生第一个随机数 while (i < role.Length - 1) { int temp = rd.Next(5); if (role.Contains(temp)) { continue; } role[i] = temp; i++; } return role; }
threenewbee 2012-11-24
  • 打赏
  • 举报
回复
int[] result = Enumerable.Range(0, 5).OrderBy(x => Guid.NewGuid()).ToArray();
SocketUpEx 2012-11-24
  • 打赏
  • 举报
回复
        static void Main(string[] args)
        {
            Int32[] arrInt = { 0, 1, 2, 3, 4 };

            Int32 iTmp = 0, iTmpIndex = 0;

            for (Int32 index = 0; index < arrInt.Length;index++)
            {
                Random r = new Random(System.Guid.NewGuid().GetHashCode());
                iTmpIndex = r.Next(0, arrInt.Length - 1);

                iTmp = arrInt[index];
                arrInt[index] = arrInt[iTmpIndex];
                arrInt[iTmpIndex] = iTmp;
            }

            foreach (Int32 i in arrInt)
            {
                Console.WriteLine(i);
            }
        }
angel6709 2012-11-24
  • 打赏
  • 举报
回复
int role = new int[]{0,1,2,3,4}; Random rd = new Random();//产生随机数 for(int i=0;i<100;i++) { int r=rd.Next(4); int temp=role[0]; role[0]=role[r]; role[r]=temp; }
瑞卡哥哥 2012-11-24
  • 打赏
  • 举报
回复
测试最高效率的方法,使用dataset<T>范型

int[] GetArray()
{
Random r=new Random();
DataSet<int> ds=new DataSet<int>();
while(ds.Count<5)
{
ds.Add(r.Next(0-5));
}
return ds.ToArray();
}
熙风 2012-11-24
  • 打赏
  • 举报
回复
    List<int> nums = new List<int>();
            Random rd = new Random();//产生随机数
            while (nums.Count <5)
            {
                int num = rd.Next(5);
                if(!nums.Contains(num))
                nums.Add(num);
            }
bookc-man 2012-11-24
  • 打赏
  • 举报
回复
 static void Main(string[] args)
        {
            Int32[] arrInt = { 0, 1, 2, 3, 4 };
 
            Int32 iTmp = 0, iTmpIndex = 0;
 
            for (Int32 index = 0; index < arrInt.Length;index++)
            {
                Random r = new Random(System.Guid.NewGuid().GetHashCode());
                iTmpIndex = r.Next(0, arrInt.Length - 1);
 
                iTmp = arrInt[index];
                arrInt[index] = arrInt[iTmpIndex];
                arrInt[iTmpIndex] = iTmp;
            }
 
            foreach (Int32 i in arrInt)
            {
                Console.WriteLine(i);
            }
        }
  • 打赏
  • 举报
回复

 Random r = new Random();
            var ary = Enumerable.Range(1, 100).Select(t => r.Next()).Distinct().Take(5).ToArray();
           
聖傑 2012-11-24
  • 打赏
  • 举报
回复
引用 6 楼 happy09li 的回复:
C# code?12345678 List<int> nums = new List<int>(); Random rd = new Random();//产生随机数 while (nums.Count <5) { int num = rd.Next(5); ……
顶这个。
angel6709 2012-11-23
  • 打赏
  • 举报
回复
你可以先初始化一个数组 a{0,1,2,3,4} 然后100次产生1--4的随机数i a[i] 和 a[0] 一样得到你要的效果

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧