2013-12-13 44 views
1

我已經將隨機數字放入數組中,但現在我想阻止它在列表框中顯示爲雙精度。我已經有了一個開始入手:如何防止重複隨機生成的數字

private bool InArray(int getal, int[] getallen, int aantal) 
    { 

    } 

我認爲解決的辦法是一樣的東西時的數量是在它已經返回true和else只是不停用代碼去,但是我怎麼也想不到我的可以做到這一點。

這是我的代碼:

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

你應該使用HashSet 不是一個數組:http://msdn.microsoft.com/en-us/library/bb359438(v=vs.110).aspx – user3041160

+0

謝謝你的回覆,但我必須使用數組 – user3043427

回答

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實行高效。

+0

嗨,感謝您的回覆,但是我必須使用此程序的陣列 – user3043427

+1

數組也包含,但您需要調整它的大小以便添加,以便您可以根據數組替換哈希集。 – Bas

+0

對不起,我不是很擅長c#,我不知道包含什麼。 – user3043427