代码如下,但是当选号范围与个数相近的时候,判断相同的随机数的函数会出现错误,提示的错误是无限循环或者无限递归,为什么啊?当选号范围是30同时选号个数是29的时候,会出现错误。using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace _1._5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} int up,number=0;
private void button1_Click(object sender, EventArgs e)
{
if (number != 0) label3.Text = "";
up = Convert.ToInt32(this.numericUpDown1.Value); //范围,最大值
number = Convert.ToInt32(this.numericUpDown2.Value); //随机数个数
if (up <= number)
{
MessageBox.Show("选号范围必须大于选号个数!", "错误提示");
return ;
}
int[] a=new int[up];
a = getRandomNum(number, 0, up); //调用产生随机数
for (int i = 0; i < number; i++)
{
label3.Text = label3.Text+" "+ a[i].ToString();
}
} private void button2_Click(object sender, EventArgs e)
{
Close();
}//以下程序代码来源于书上
//产生随机数
public int[] getRandomNum(int num, int minValue, int maxValue)
{
Random ra = new Random(unchecked((int)DateTime.Now.Ticks)); int[] arrNum = new int[num]; //定义数组(大小) int tmp = 0;
for (int i = 0; i < num; i++)
{
tmp = ra.Next(minValue, maxValue); //产生随机数赋给tmp
arrNum[i] = getNum(arrNum, tmp, minValue, maxValue, ra);
}
return arrNum;
}
Random ra=new Random(unchecked((int)DateTime.Now.Ticks));
//判断当前产生的随机数是否与之前的数有重复----递归算法
public int getNum(int[] arrNum, int tmp, int minValue, int maxValue, Random ra)
{
for (int n = 0; n <=arrNum.Length -1; n++)
if (arrNum[n] == tmp)
{
tmp = ra.Next(minValue, maxValue); /******在这里提示无限递归********/
getNum(arrNum, tmp, minValue, maxValue, ra);
}
return tmp; //返回到getRandomNum()函数中
}出现error
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace _1._5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} int up,number=0;
private void button1_Click(object sender, EventArgs e)
{
if (number != 0) label3.Text = "";
up = Convert.ToInt32(this.numericUpDown1.Value); //范围,最大值
number = Convert.ToInt32(this.numericUpDown2.Value); //随机数个数
if (up <= number)
{
MessageBox.Show("选号范围必须大于选号个数!", "错误提示");
return ;
}
int[] a=new int[up];
a = getRandomNum(number, 0, up); //调用产生随机数
for (int i = 0; i < number; i++)
{
label3.Text = label3.Text+" "+ a[i].ToString();
}
} private void button2_Click(object sender, EventArgs e)
{
Close();
}//以下程序代码来源于书上
//产生随机数
public int[] getRandomNum(int num, int minValue, int maxValue)
{
Random ra = new Random(unchecked((int)DateTime.Now.Ticks)); int[] arrNum = new int[num]; //定义数组(大小) int tmp = 0;
for (int i = 0; i < num; i++)
{
tmp = ra.Next(minValue, maxValue); //产生随机数赋给tmp
arrNum[i] = getNum(arrNum, tmp, minValue, maxValue, ra);
}
return arrNum;
}
Random ra=new Random(unchecked((int)DateTime.Now.Ticks));
//判断当前产生的随机数是否与之前的数有重复----递归算法
public int getNum(int[] arrNum, int tmp, int minValue, int maxValue, Random ra)
{
for (int n = 0; n <=arrNum.Length -1; n++)
if (arrNum[n] == tmp)
{
tmp = ra.Next(minValue, maxValue); /******在这里提示无限递归********/
getNum(arrNum, tmp, minValue, maxValue, ra);
}
return tmp; //返回到getRandomNum()函数中
}出现error
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货