C#如何实现随机数不相同?

privatevoidbutton2_Click(objectsender,EventArgse){SqlConnectionconn=newSqlConnection(... private void button2_Click(object sender, EventArgs e)
{

SqlConnection conn=new SqlConnection (@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\WindowsFormsApplication1\WindowsFormsApplication1\tk.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
conn.Open();
SqlCommand selecmd=new SqlCommand ("select count(*) from SUBJECT where s_sco=2.0",conn);

//11.22随机抽取模块,如何实现产生不同随机数??
Random r = new Random();
int count=(int)selecmd .ExecuteScalar();
int k=int.Parse (textBox1 .Text );
int[] array=new int[50];
DataSet ds = new DataSet();
for (int i = 0; i < k; i++)
{
array[i] = r.Next(0, count);
int temp=array[i];
for (int z = 0; z < k; z++)
{
if (temp == array[z]) array[z] = array[z] + z + 1;
else break;
} //我的避免重复随机数的办法,但似乎不管用
SqlCommand cmd1=new SqlCommand ("select s_no2,s_sub,s_sco,s_tchno from SUBJECT where s_no2="+array [i]+"",conn);
SqlDataAdapter da = new SqlDataAdapter(cmd1.CommandText, conn);
da.Fill(ds);
}
dataGridView1.DataSource = ds.Tables [0];

conn.Close();
}

这个程序时根据数据库中S_NO2随机选择TEXTBOX1.TEXT道题目,上述代码是我自己编写的,但总是有点小问题,(1)经常出现相同的S_NO2,也就是相同的题目,求算法~(2)有时候输入10,但是出现的却不是10条记录,可能9条,8条。。。但是几率不是很大~~求解。。。谢谢
谢谢楼下几位。。但我的问题不是从N个数里边随机抽取M个不同的数。。。而是让代码生成一个随机数,让取到的TEXTBOX1.TEXT个数互不相同。。。
4楼的貌似有点问题。。SqlCommand cmd1=new SqlCommand ("select s_no2,s_sub,s_sco,s_tchno from SUBJECT where s_no2="+getra[i]+"",conn);不对。。提示STRING无法转化INT
展开
 我来答
iampaipaipai
2009-11-23 · 超过11用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:0
展开全部
楼主需要的是随机组合吧,即从n个数里面随机取m个不重复的数(n>m),给你一种递归的方法吧。(这里取n个数的范围为0到n-1,方便和数组对应)

思想是这样的
1. 先从n-1个数里面取出m-1个数,记为arr0(范围为0到n-2);
2. 然后在n个数里面取第m个数,如果arr[m-1]已经包含了第m个数,则将n-1添加到arr0里面,否则直接添加第m个数到arr0里面。这样arr0里面含有的数都不重复,而且可以证明每一个数的取出来的几率都是一样的。

代码如下
void F(int n, int m, out int[] arr, Random r)
{
if(m == 1) {
arr[0] = r.Next(0,n-1); return;
}

F(n-1,m-1,arr,r);

int rint = r.Next(0,n-1);
for(int i = 0; i<m-1;i++)
{
if(arr[i] == rint)
{
arr[m-1] = n-1; return;
}
}

arr[m-1] = rint;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
话赐师3
2013-04-01 · 超过23用户采纳过TA的回答
知道答主
回答量:175
采纳率:100%
帮助的人:43万
展开全部
因为如果随机取数跟以前相同你就结束了该循环,导致少取值一个数
在else这里改成else{i-=1;break;}就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
村头希望8
2009-11-22 · TA获得超过910个赞
知道小有建树答主
回答量:283
采纳率:0%
帮助的人:206万
展开全部
for (int z = 0; z < i; z++)
{
if (temp == array[z])
{
i--;
break;
}
}

这个是里边的for循环。
不过那个输入值如果小于array的长度,多出的部分为0.
希望你可以有思路
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
易曼青l
2009-11-23 · TA获得超过125个赞
知道小有建树答主
回答量:316
采纳率:0%
帮助的人:156万
展开全部
public string getra(int len)
{
try
{
string str = "";
while (str.Length < len)
{
str = str + ra.Next();
}
return str.Substring(0, len);
}
catch (Exception)
{
return "";
}
}
len是你要产生的随机数的长度
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
darko2o8
2009-11-22 · TA获得超过616个赞
知道小有建树答主
回答量:987
采纳率:0%
帮助的人:442万
展开全部
要唯一的话用guid
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式