如何防止重复的随机生成的数字

时间:2013-12-13 10:30:28

标签: c# random numbers duplicates

我已将随机数放入数组中,但现在我想阻止它在列表框中显示为double。我已经开始了:

    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)
    {

    }
}

}

班级:

namespace Trekking
{
class Trekking
{
    //attributes
    private Random random;
    private int[] getallen;

    //properties
    public int Maxwaarde { get; private set; } //maximum waarde van te trekken getal
    public int AantalGetrokken { get; private set; } //aantal getrokken getallen
    public int AantalGewenst { get; private set; } //aantal te trekken getallen
    public bool IsTenEinde { get; private set; } //true als alle getallen gerokken


    //constructor en methoden
    public Trekking(int Maxwaarde, int AantalGewenst)
    {  
        this.Maxwaarde = Maxwaarde;
        this.AantalGewenst = AantalGewenst;
        AantalGetrokken = 0;
        IsTenEinde = false;
        random = new Random();
        getallen = new int[AantalGewenst];
    }

    //methods
    public void TrekGetal()
    {
        int erbijArray;

        for (int i = 0; i < AantalGewenst; i++)
        {
            erbijArray = random.Next(1, Maxwaarde);
            getallen[i] = erbijArray;
            AantalGetrokken++;
        }
    }

    public int GeefGetal(int number)
    {
        return getallen[number];

    }
    //sorteert getrokken getallen in array "getallen"
    public void Sort()
    {   
        Array.Sort(getallen);
    }

}

}

1 个答案:

答案 0 :(得分:1)

我简化了您的问题(省略了最小值,最大值,最大值等)。

基本上,您可以保留已经遇到的事项列表:

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;
    }

}

一个集合不包含重复项,并且在Contains实现中很有效。