Gå til innhold

Anbefalte innlegg

Skrevet (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 av kjaa
Videoannonse
Annonse
Skrevet

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...

Skrevet (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 :p

 

 

EDIT2: Fiksa rar setning. (Takk manfred)

Endret av ze5400
Skrevet

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

Skrevet (endret)

For gøy? :p

 

Liker for løkker bedre enn while av en eller annen sær grunn :tease:

 

 

Ble ikke SÅÅÅ mye mer kode med min løsning da :p

Endret av ze5400
Skrevet

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; )
...

Skrevet

Se min redigerte post :p

 

 

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 ^^

Skrevet
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 :p

 

 

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

Skrevet

Det var da svært så teoretiske vi var her da :tease:

 

 

Det er også mulig at jeg vinner i lotto hver eneste onsdag resten av mitt liv, men jeg tviler litt :p

Skrevet (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 av The Jackal
Skrevet
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 :p

 

 

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.

Skrevet

Gadd du lese tråden engang? :p

 

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

Skrevet (endret)
Gadd du lese tråden engang? :p

 

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 av invictus
Skrevet

Dere programmerere er så glade i matematikk :tease:

 

Når jeg ser på teoretisk stoff tenker jeg: "Bah. Det var det med teori og praksis. La det skure" :p

 

 

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?

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...