c#编译一个1~32随机选取4个数字,但要求4个数字都不相同,求相应的代码?
{//随机类Randomr=newRandom();//产生一个0~33的数,包括下线不包括上线inti=r.Next(0,33);richTextBox2.Text+=...
{
//随机类
Random r = new Random();
//产生一个0~33的数,包括下线不包括上线
int i = r.Next(0, 33);
richTextBox2.Text += i.ToString() + "\t";
int n = r.Next(0, 33);
richTextBox2.Text += n.ToString() + "\t";
........
这样的随机选择会出现数字相同的,怎么避免选了的数字不会再选的?
求修改后可以运行的代码..... 展开
//随机类
Random r = new Random();
//产生一个0~33的数,包括下线不包括上线
int i = r.Next(0, 33);
richTextBox2.Text += i.ToString() + "\t";
int n = r.Next(0, 33);
richTextBox2.Text += n.ToString() + "\t";
........
这样的随机选择会出现数字相同的,怎么避免选了的数字不会再选的?
求修改后可以运行的代码..... 展开
展开全部
我是添加了一个TextBox控件名为textBox1用来显示随机取得的4个数字;你也可以改为RichTextBox显示
textBox1.Text = "";
ArrayList result = new ArrayList();//用来存放随即取得的数
Random r = new Random();
for (int i = 0; i < 4; i++)
{
int a = r.Next(1, 33);//存放随机取得的数
if (i != 0) // 为了第一次随机不进行比较
{
if (a == Convert.ToInt32(result[i - 1])) //比较本次随机的数是否与上一次相等
{
i--;
continue;
}
else
result.Add(a);
}
else
result.Add(a);
}
result.Sort();//将取得的数字进行排序,为了好看
//显示取得的4个数
for (int i = 0; i < 4; i++)
{
textBox1.Text += result[i] + "\t";
}
textBox1.Text = "";
ArrayList result = new ArrayList();//用来存放随即取得的数
Random r = new Random();
for (int i = 0; i < 4; i++)
{
int a = r.Next(1, 33);//存放随机取得的数
if (i != 0) // 为了第一次随机不进行比较
{
if (a == Convert.ToInt32(result[i - 1])) //比较本次随机的数是否与上一次相等
{
i--;
continue;
}
else
result.Add(a);
}
else
result.Add(a);
}
result.Sort();//将取得的数字进行排序,为了好看
//显示取得的4个数
for (int i = 0; i < 4; i++)
{
textBox1.Text += result[i] + "\t";
}
展开全部
一楼的代码只能求出4个随机数,无法去除重复。
二楼的理论是对的,没代码。
三楼能得出正确结果。
四楼的代码错误,只能判断相邻的两个数不重复,会出现比如“3,7,3,7”这样类似的
================================================================
Random r = new Random();
int[] n = new int[4];
for ( int i = 0; i < 4; i++ )
{
n[i] = r.Next( 0, 33 );
for ( int j = 0; j < i; j++ )
{
if ( n[i] == n[j] )
{
n[i] = r.Next( 0, 33 );
j = 0;
}
}
richTextBox2.Text += n[i].ToString() + "\t";
}
================================================================
将上面的代码复制粘贴替换掉你原来的代码即可,生成4个绝对不重复的0-33之间的随机数。
或者也可以用下面这段精简代码,效果是一样的:
================================================================
Random r = new Random();
int?[] n = new int?[4];
for ( int i = 0; i < 4; )
{
n[i] = r.Next( 0, 33 );
for ( int j = 0; j < i; j++ ) if ( n[i] == n[j] ) n[i] = null;
richTextBox2.Text += n[i] == null ? "" : n[i++].ToString() + "\t";
}
================================================================
二楼的理论是对的,没代码。
三楼能得出正确结果。
四楼的代码错误,只能判断相邻的两个数不重复,会出现比如“3,7,3,7”这样类似的
================================================================
Random r = new Random();
int[] n = new int[4];
for ( int i = 0; i < 4; i++ )
{
n[i] = r.Next( 0, 33 );
for ( int j = 0; j < i; j++ )
{
if ( n[i] == n[j] )
{
n[i] = r.Next( 0, 33 );
j = 0;
}
}
richTextBox2.Text += n[i].ToString() + "\t";
}
================================================================
将上面的代码复制粘贴替换掉你原来的代码即可,生成4个绝对不重复的0-33之间的随机数。
或者也可以用下面这段精简代码,效果是一样的:
================================================================
Random r = new Random();
int?[] n = new int?[4];
for ( int i = 0; i < 4; )
{
n[i] = r.Next( 0, 33 );
for ( int j = 0; j < i; j++ ) if ( n[i] == n[j] ) n[i] = null;
richTextBox2.Text += n[i] == null ? "" : n[i++].ToString() + "\t";
}
================================================================
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Random r = new Random();
int n[] = new int[4];
int flags = 0; for(int i = 0; i<4; )
{
int num = r.Next(0,32);//楼主标题上是1-32,下面的却是0-32,不知何故
int flag = 1<<num;
if(flag&flags == 0)
{
n[i++] = num + 1;
flags&= flag;
}
}
//如果是0-33,请将flag和flags的类型声明为long
int n[] = new int[4];
int flags = 0; for(int i = 0; i<4; )
{
int num = r.Next(0,32);//楼主标题上是1-32,下面的却是0-32,不知何故
int flag = 1<<num;
if(flag&flags == 0)
{
n[i++] = num + 1;
flags&= flag;
}
}
//如果是0-33,请将flag和flags的类型声明为long
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用循环,做个判断,在循环里面做个判断,如果跟上面出现过的数字相同就重新再选择.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
方法1。还是贴主的原始方法,用hashtable暂存一下已抽取的值,已备后面的比较。
方法2. 无需抽取,直接乱序排序,提取头4个,使用linq的话就只一句话
var res= Enumerable.Range(1, 32).OrderBy(p => Guid.NewGuid()).Take(4);
方法2. 无需抽取,直接乱序排序,提取头4个,使用linq的话就只一句话
var res= Enumerable.Range(1, 32).OrderBy(p => Guid.NewGuid()).Take(4);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询