C# 如何防止重复随机生成的数字
我已经将随机数放入数组中,但现在我想防止它在列表框中显示为双精度。我已经有了一个开始:C# 如何防止重复随机生成的数字,c#,random,numbers,duplicates,C#,Random,Numbers,Duplicates,我已经将随机数放入数组中,但现在我想防止它在列表框中显示为双精度。我已经有了一个开始: private bool InArray(int getal, int[] getallen, int aantal) { } 我认为解决方案是,当数字已经在其中时,返回true,否则继续执行代码,但我想不出如何才能做到这一点 这是我的代码: namespace Trekking { public partial class Form1 : Form { private T
private bool InArray(int getal, int[] getallen, int aantal)
{
}
我认为解决方案是,当数字已经在其中时,返回true,否则继续执行代码,但我想不出如何才能做到这一点
这是我的代码:
namespace Trekking
{
public partial class Form1 : Form
{
private Trekking trekking;
public Form1()
{
InitializeComponent();
btnLaatZien.Enabled = false;
btnSerie.Enabled = false;
btnSorteer.Enabled = false;
btnStart.Enabled = true;
btnStop.Enabled = false;
btnTrek.Enabled = false;
}
private void btnStart_Click(object sender, EventArgs e)
{
int AantalGewenst = Convert.ToInt32(tbInvoerAantalGewenst.Text);
int Maxwaarde = Convert.ToInt32(tbInvoerMaxwaarde.Text);
trekking = new Trekking(Maxwaarde, AantalGewenst);
btnTrek.Enabled = true;
btnStop.Enabled = true;
btnStart.Enabled = false;
if (Maxwaarde > 90)
{
MessageBox.Show("Uw getal mag niet boven de 90 zijn!");
btnStart.Enabled = true;
btnTrek.Enabled = false;
btnStop.Enabled = false;
}
else if (Maxwaarde < 0)
{
MessageBox.Show("Dit aantal is niet mogelijk!");
btnStart.Enabled = true;
btnTrek.Enabled = false;
btnStop.Enabled = false;
}
else if (AantalGewenst > 45)
{
MessageBox.Show("Uw getal mag niet boven de 45 zijn!");
btnStart.Enabled = true;
btnTrek.Enabled = false;
btnStop.Enabled = false;
}
if (AantalGewenst < 1)
{
MessageBox.Show("Dit aantal is niet mogelijk!");
btnStart.Enabled = true;
btnTrek.Enabled = false;
btnStop.Enabled = false;
}
else if (Maxwaarde / AantalGewenst < 2)
{
MessageBox.Show("Uw maxwaarde moet minstens het dubbele van Aantal Gewenst zijn!");
btnStart.Enabled = true;
btnTrek.Enabled = false;
btnStop.Enabled = false;
}
else
{
if (AantalGewenst <= 45)
btnStart.Enabled = false;
btnTrek.Enabled = true;
btnStop.Enabled = true;
}
}
public void getSingleNumber(int hoeveel)
{
int Getal = trekking.GeefGetal(hoeveel);
lbResultaat.Items.Add(Getal);
}
public void getTrekkingData()
{
for (int p = 0; p < trekking.AantalGewenst; p++)
{
int alleGetallen = trekking.GeefGetal(p);
lbResultaat.Items.Add(alleGetallen);
}
}
int count = 0;
private void btnTrek_Click(object sender, EventArgs e)
{
int gewenst = trekking.AantalGewenst;
label3.Text = Convert.ToString(count);
btnStop.Enabled = true;
btnSerie.Enabled = false;
trekking.TrekGetal();
getSingleNumber(count);
count++;
if (count == trekking.AantalGewenst)
{
MessageBox.Show("Alle gewenste trekkingen zijn uitgevoerd");
btnTrek.Enabled = false;
btnStop.Enabled = true;
btnSerie.Enabled = false;
}
}
private void btnStop_Click(object sender, EventArgs e)
{
lbResultaat.Items.Clear();
btnLaatZien.Enabled = false;
btnSerie.Enabled = false;
btnSorteer.Enabled = false;
btnStart.Enabled = true;
btnStop.Enabled = false;
btnTrek.Enabled = false;
tbInvoerAantalGewenst.Enabled = true;
tbInvoerMaxwaarde.Enabled = true;
count = 0;
}
private void tbInvoerMaxwaarde_KeyPress(object sender, KeyPressEventArgs e)
{
char ch = e.KeyChar;
e.Handled = !(Char.IsDigit(ch) || (ch == '-') || (ch < ' '));
}
private void k(object sender, KeyPressEventArgs e)
{
char ch = e.KeyChar;
e.Handled = !(Char.IsDigit(ch) || (ch == '-') || (ch < ' '));
}
private bool InArray(int getal, int[] getallen, int aantal)
{
}
}
名称空间漫游
{
公共部分类Form1:Form
{
私人徒步旅行;
公共表格1()
{
初始化组件();
btnLaatZien.Enabled=false;
btnSerie.Enabled=false;
bSenserteer.Enabled=false;
btnStart.Enabled=true;
btnStop.Enabled=false;
btnTrek.Enabled=false;
}
私有void btnStart_单击(对象发送方,事件参数e)
{
int AantalGewenst=Convert.ToInt32(tbinvoierantalgewenst.Text);
int Maxwaarde=Convert.ToInt32(tbinvotermaxwaarde.Text);
徒步旅行=新的徒步旅行(Maxwaarde,AantalGewenst);
btnTrek.Enabled=true;
btnStop.Enabled=true;
btnStart.Enabled=false;
如果(最大值>90)
{
MessageBox.Show(“Uw getal mag niet boven de 90 zijn!”);
btnStart.Enabled=true;
btnTrek.Enabled=false;
btnStop.Enabled=false;
}
否则如果(最大值<0)
{
Show(“Dit aantal是niet mogelijk!”);
btnStart.Enabled=true;
btnTrek.Enabled=false;
btnStop.Enabled=false;
}
如果(安塔尔格温斯特>45)
{
MessageBox.Show(“Uw getal mag niet boven de 45 zijn!”);
btnStart.Enabled=true;
btnTrek.Enabled=false;
btnStop.Enabled=false;
}
如果(安塔尔格温斯特<1)
{
Show(“Dit aantal是niet mogelijk!”);
btnStart.Enabled=true;
btnTrek.Enabled=false;
btnStop.Enabled=false;
}
否则如果(Maxwaarde/AantalGewenst<2)
{
MessageBox.Show(“Uw maxwaarde moet minstens het Colle van Aantal Gewenst zijn!”);
btnStart.Enabled=true;
btnTrek.Enabled=false;
btnStop.Enabled=false;
}
其他的
{
如果(AantalGewenst我简化了你的问题(省略了最小值、最大值、最大值等)
基本上,您可以保留一份您已经遇到的事情的列表:
public class Lottery
{
public HashSet<int> _previousNumbers = new HashSet<int>();
private Random random = new Random();
public int GetNextNumber()
{
int next;
do
{
next = random.Next();
}
while (_previousNumbers.Contains(next));
_previousNumbers.Add(next);
return next;
}
}
公共类彩票
{
public HashSet_previousNumbers=新HashSet();
私有随机=新随机();
public int GetNextNumber()
{
int-next;
做
{
next=random.next();
}
while(_previousNumbers.Contains(next));
_以前的数字。添加(下一步);
下一步返回;
}
}
集合不包含重复项,并且在其包含的实现中非常有效。我简化了您的问题(省略了最小值、最大值、最大值等)
基本上,您可以保留一份您已经遇到的事情的列表:
public class Lottery
{
public HashSet<int> _previousNumbers = new HashSet<int>();
private Random random = new Random();
public int GetNextNumber()
{
int next;
do
{
next = random.Next();
}
while (_previousNumbers.Contains(next));
_previousNumbers.Add(next);
return next;
}
}
公共类彩票
{
public HashSet_previousNumbers=新HashSet();
私有随机=新随机();
public int GetNextNumber()
{
int-next;
做
{
next=random.next();
}
while(_previousNumbers.Contains(next));
_以前的数字。添加(下一步);
下一步返回;
}
}
集合不包含重复项,并且在其包含实现中非常有效。您应该使用哈希集而不是数组:感谢回复,但我必须使用数组您应该使用哈希集而不是数组:感谢回复,但我必须使用数组我感谢回复,但我必须为此程序使用数组Array也有contains,但您需要调整它的大小才能添加,这样,如果您愿意,可以用数组替换哈希集。很抱歉,我不太擅长c#,我不知道什么是contain。方法“Contains”返回一个布尔值,无论数组中是否存在某个项。您好,谢谢您的回复,但我必须为此程序使用数组array也有Contains,但您需要若要调整其大小以添加,则可以使用数组替换哈希集。抱歉,我不太擅长c#,我不知道contain是什么。方法“Contains”返回一个布尔值,以确定数组中是否存在特定项。