
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 展开
{
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 展开
6个回答
展开全部
楼主需要的是随机组合吧,即从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;
}
思想是这样的
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为如果随机取数跟以前相同你就结束了该循环,导致少取值一个数
在else这里改成else{i-=1;break;}就好了
在else这里改成else{i-=1;break;}就好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for (int z = 0; z < i; z++)
{
if (temp == array[z])
{
i--;
break;
}
}
这个是里边的for循环。
不过那个输入值如果小于array的长度,多出的部分为0.
希望你可以有思路
{
if (temp == array[z])
{
i--;
break;
}
}
这个是里边的for循环。
不过那个输入值如果小于array的长度,多出的部分为0.
希望你可以有思路
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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是你要产生的随机数的长度
{
try
{
string str = "";
while (str.Length < len)
{
str = str + ra.Next();
}
return str.Substring(0, len);
}
catch (Exception)
{
return "";
}
}
len是你要产生的随机数的长度
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要唯一的话用guid
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询