kjaa Skrevet 27. mai 2008 Del Skrevet 27. mai 2008 (endret) Hei. Etter mye søking og mekking har jeg fått fram denne koden: public partial class Form1 : Form { public Form1() { InitializeComponent(); } Random m_random = new Random(); int[] selectedNumbers = new int[7]; private void Button1_Click(object sender, EventArgs e) { // For vært array medlem, tildeles ett random nummer for (int numberCount = 0; numberCount < selectedNumbers.Length; numberCount++) { int newNumber = m_random.Next(1, 34); for (int i = 0; i < numberCount; i++) { if (newNumber == selectedNumbers) { newNumber = m_random.Next(1, 34); // Tildeler ett nytt nr. continue; // Tester igjen } } selectedNumbers[numberCount] = newNumber; } int[] NumbersArray = new int[7]; for (int x = 0; x < NumbersArray.Length; x++) { NumbersArray[x] = selectedNumbers[x]; } // Sorterer Array.Sort(NumbersArray); // Plasserer tallen i teksbokser. textBox1.Text = NumbersArray[0].ToString(); textBox2.Text = NumbersArray[1].ToString(); textBox3.Text = NumbersArray[2].ToString(); textBox4.Text = NumbersArray[3].ToString(); textBox5.Text = NumbersArray[4].ToString(); textBox6.Text = NumbersArray[5].ToString(); textBox7.Text = NumbersArray[6].ToString(); Denne velger 7 vilkårlige tall og sorterer dem. Jeg kom fram til denne etter å ha lest kap 8 i "Murach's C# 2008 og gransket en liknende javakode. Må innrømme at jeg ikke skjønner hele koden, derfor dette innlegget. Det jeg nå ønsker er å generer opp alle lottorekkene og vise(helst lagre)resultatet i en liste eller texbox eller noe bedre. Jeg gjorde dette med for løkker i Delphi for mange år siden. Det gikk, men tok veldig lang tid.(uegnet) Noen som vet råd? [Edit] Videre testing viser at det av og til blir duplikater. Endret 27. mai 2008 av kjaa Lenke til kommentar
abcd423417984 Skrevet 28. mai 2008 Del Skrevet 28. mai 2008 Hvis du ikke vil ha duplikater er mitt forslag at du lager en array med alle mulige tall du kan trekke (hvordan du sorterer dem er forsåvidt opp til deg selv), og har en int som sier hvor mange tall det "er igjen" i arrayen. for hver gang du trekker et tall så genererer du et tilfeldig tall mellom 0 og denne int verdien og henter ut den indexen i arrayen...etter du har hentet ut tallet erstatter du det i arrayen med hva det nå enn er som ligger sist i arrayen og reduserer int verdien med 1. Bare et forslag... Lenke til kommentar
ze5400 Skrevet 28. mai 2008 Del Skrevet 28. mai 2008 (endret) Selv hadde jeg gjort noe slikt: List<int> Numbers = new List<int>(); Random Rand = new Random(); for (; Numbers.Count < 7; ) { int CRand = Rand.Next(1, 34); if (!Numbers.Contains(CRand)) { Numbers.Add(CRand); } } EDIT: Fookno. Jeg var for sen EDIT2: Fiksa rar setning. (Takk manfred) Endret 28. mai 2008 av ze5400 Lenke til kommentar
Manfred Skrevet 28. mai 2008 Del Skrevet 28. mai 2008 Hvorfor skal du bruke en for-løkke? List<int> Numbers = new List<int>(); Random Rand = new Random(); while ( Numbers.Count < 7 ) { int r = Rand.Next(1, 34); if( !Numbers.Contains(r) ) Numbers.Add(r); } Lenke til kommentar
ze5400 Skrevet 28. mai 2008 Del Skrevet 28. mai 2008 (endret) For gøy? Liker for løkker bedre enn while av en eller annen sær grunn Ble ikke SÅÅÅ mye mer kode med min løsning da Endret 28. mai 2008 av ze5400 Lenke til kommentar
Manfred Skrevet 28. mai 2008 Del Skrevet 28. mai 2008 Ikke mye mindre kode, men lettere å lese, og mer intuitiv. Som jeg sa til deg på msn, så kan du jo bruke for-løkker på samme måte da, hvis "while" er et så stygt ord: for(; Numbers.Count < 7; ) ... Lenke til kommentar
ze5400 Skrevet 28. mai 2008 Del Skrevet 28. mai 2008 Se min redigerte post Har aldri påstått at jeg misliker while, sa bare at jeg som regel liker for bedre. Ikke i dette tilfellet riktignok, holder bare fast på for for å kverrulere ^^ Lenke til kommentar
HDSoftware Skrevet 28. mai 2008 Del Skrevet 28. mai 2008 Selv hadde jeg gjort noe slikt: List<int> Numbers = new List<int>(); Random Rand = new Random(); for (; Numbers.Count < 7; ) { int CRand = Rand.Next(1, 34); if (!Numbers.Contains(CRand)) { Numbers.Add(CRand); } } EDIT: Fookno. Jeg var for sen EDIT2: Fiksa rar setning. (Takk manfred) Selvsagt litt pirkete, men teoretisk kan dette føre til en evig løkke. Invictus forslag er nok derfor det beste, men som sagt, dette er veldig teoretisk da ;-) Lenke til kommentar
ze5400 Skrevet 28. mai 2008 Del Skrevet 28. mai 2008 Det var da svært så teoretiske vi var her da Det er også mulig at jeg vinner i lotto hver eneste onsdag resten av mitt liv, men jeg tviler litt Lenke til kommentar
kjaa Skrevet 28. mai 2008 Forfatter Del Skrevet 28. mai 2008 Hei. Takk til alle. Skal teste ut dette i kveld. Lenke til kommentar
The Jackal Skrevet 30. mai 2008 Del Skrevet 30. mai 2008 (endret) public List<int> Generate() { List<int> numbers = new List<int>(34); List<int> selectedNumbers = new List<int>(); Random generator = new Random(DateTime.Now.Millisecond); for (int i = 1; i < 35; i++) numbers.Add(i); for(int i=0;i<7;i++) { int x = generator.Next(0,numbers.Count); selectedNumbers.Add(numbers[x]); numbers.RemoveAt(x); } return selectedNumbers; } Fordelen her er at du slipper å teste om tallet er trukket allerede. Dvs løkken vil alltid bare kjøre 7 ganger. Downside er naturlig nok at du må bygge opp listen med tall du kan velge fra først. Endret 30. mai 2008 av The Jackal Lenke til kommentar
abcd423417984 Skrevet 30. mai 2008 Del Skrevet 30. mai 2008 Selv hadde jeg gjort noe slikt: List<int> Numbers = new List<int>(); Random Rand = new Random(); for (; Numbers.Count < 7; ) { int CRand = Rand.Next(1, 34); if (!Numbers.Contains(CRand)) { Numbers.Add(CRand); } } EDIT: Fookno. Jeg var for sen EDIT2: Fiksa rar setning. (Takk manfred) Problemet med denne er at koden i teorien kan kjøre "evig" hvis den trekker samme tallet hver gang. Det slipper man med løsningen jeg beskrev ovenfor. Lenke til kommentar
ze5400 Skrevet 30. mai 2008 Del Skrevet 30. mai 2008 Gadd du lese tråden engang? Om du ser noen poster opp er det en som har påpekt det alt. (Noe jeg forsåvidt var klar over, men da det er forsjell mellom teori og praksis er det ikke alle hensyn det er noen vits i å ta engang.) Lenke til kommentar
abcd423417984 Skrevet 31. mai 2008 Del Skrevet 31. mai 2008 (endret) Gadd du lese tråden engang? Om du ser noen poster opp er det en som har påpekt det alt. (Noe jeg forsåvidt var klar over, men da det er forsjell mellom teori og praksis er det ikke alle hensyn det er noen vits i å ta engang.) Ahh sorry. Missa den ja. Men husk at selv om å trekke samme tall hver gang er lite sannsynlig så øker sannsynligheten for at det skjer jo flere tall man allerede har trukket. Endret 31. mai 2008 av invictus Lenke til kommentar
ze5400 Skrevet 31. mai 2008 Del Skrevet 31. mai 2008 Joda, men når det er kun syv tall man skal trekke ... Lenke til kommentar
Manfred Skrevet 2. juni 2008 Del Skrevet 2. juni 2008 Det er teoretisk sett en mulighet, men den er så ekstremt minimal. Lenke til kommentar
ze5400 Skrevet 2. juni 2008 Del Skrevet 2. juni 2008 Dere programmerere er så glade i matematikk Når jeg ser på teoretisk stoff tenker jeg: "Bah. Det var det med teori og praksis. La det skure" Når jeg først skriver i den delen av forumet hvor noen av de mest beleste folkene på hele diskusjon.no holder til; Hva blir riktig når man snakker om folk i flertall (ref. første setningen min i dette innlegget)? Jeg blir mener på at en gruppe personer er f.eks "(de er så) glade", og ikke "(de er så) glad", men jeg ser ikke mange som skriver/snakker på samme måte som meg, så her er det kansje jeg som er helt på bærtur? Lenke til kommentar
j000rn Skrevet 2. juni 2008 Del Skrevet 2. juni 2008 Jeg blir mener på at en gruppe personer er f.eks "(de er så) glade", og ikke "(de er så) glad", men jeg ser ikke mange som skriver/snakker på samme måte som meg, så her er det kansje jeg som er helt på bærtur? Vi programmerere er nok som regel flinkere i engelsk enn norsk, siden de meste av lesestoffet er på engelsk.... Men vi er veldig flinke til å finne riktig sted å spørre spørsmål.... Lenke til kommentar
ze5400 Skrevet 2. juni 2008 Del Skrevet 2. juni 2008 Men Jørn da Spørsmålet var litt "off the record". Ikke noe jeg lurer så mye på at det er verdt å starte en ny tråd for. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå