Hjälp med att slumpa unika tal C#

Permalänk

Hjälp med att slumpa unika tal C#

Hej,

Behöver verkligen hjälp med att slumpa fram 52 unika heltal. Dvs varje dragning skall symbolisera ett unikt kort från en kortlek som har skapas i en List.
Som koden ser ut nu så skrivs det ut 52 slumpade kort men samma kort kan förekomma flera gånger. Kan någon tipsa om hur jag skall göra för att få ut 52 unika kort?
Om någon kan hjälpa en vilsen nybörjare skulle jag bli evigt tacksam!

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ovningar { class Program { static void Main(string[] args) { List<string> kortlek = new List<string>(); string[] namn = new string[13]; namn[0] = "2"; namn[1] = "3"; namn[2] = "4"; namn[3] = "5"; namn[4] = "6"; namn[5] = "7"; namn[6] = "8"; namn[7] = "9"; namn[8] = "10"; namn[9] = "Kn"; namn[10] = "D"; namn[11] = "K"; namn[12] = "E"; for (int i = 0; i < namn.Length; i++) { kortlek.Add("h" + namn[i]); kortlek.Add("r" + namn[i]); kortlek.Add("s" + namn[i]); kortlek.Add("k" + namn[i]); } Random slumpaKort = new Random(); for (int i = 0; i < kortlek.Count; i++) { int dragetKort = slumpaKort.Next(52); Console.WriteLine(kortlek[dragetKort]); } Console.ReadLine(); } } }

Permalänk
Medlem

Vad jag hade gjort:

En Kort-klass
En Kortlek-klass

När du kör en "new Kortlek()" så skapas det 52st Kort upp i en lista på Kortlek.
Kör du kortlek1.blanda() så får du en blandad kortlek.

Detta för att återspegla verkligheten så mycket som möjligt. Dessutom kan du återanvända klasserna för framtida kort-spel.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Permalänk
Medlem

om din uppgift ("namespace Ovningar"?) bara kräver att du skall slumpa dig igenom din kortlek, så kan du helt sonika ta bort det kort du slumpat fram.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk

Stort tack för svaren, uppskattar det verkligen.
Leedow: Jag har inte kommit så långt i programmeringen så det där med flera klasser låter lite för avancerat än så länge men det låter tämligen som det smartaste sättet:) Skall försöka få till det.

jovnas: Tror jag fick till det enligt din metod. Borde bli rätt att göra så här eller krånglar jag till det för mycket?

int k = 52; while (kortlek.Count > 0) { Random slumpaKort = new Random(); int dragetKort = slumpaKort.Next(k); Console.WriteLine(kortlek[dragetKort]); kortlek.RemoveAt(dragetKort); k = k - 1; }

Permalänk

iXam: tack för länken, kan nog ha nytta av den längre fram när jag förhoppningsvis blivit bättre på att tolka kod:)

Permalänk
Medlem
Skrivet av AgathonSax:

Stort tack för svaren, uppskattar det verkligen.
Leedow: Jag har inte kommit så långt i programmeringen så det där med flera klasser låter lite för avancerat än så länge men det låter tämligen som det smartaste sättet:) Skall försöka få till det.

jovnas: Tror jag fick till det enligt din metod. Borde bli rätt att göra så här eller krånglar jag till det för mycket?

int k = 52; while (kortlek.Count > 0) { Random slumpaKort = new Random(); int dragetKort = slumpaKort.Next(k); Console.WriteLine(kortlek[dragetKort]); kortlek.RemoveAt(dragetKort); k = k - 1; }

Vad jag kan se genom att snabbt kolla på koden så förstår jag inte varför du har k. Den kan ersättas med kortlek.Count(), exempelvis: k = kortlek.Count() eller int dragetKort = slumpaKort.Next(0, kortlek.Count()) eftersom den ändå returnerar det nuvarande mängden objekt i listan med en int, men inte nödvändigtvis ett krav att ersätta.

Kan rekommendera att oavsett hur svårt en klass ändå kommer vara så bör du vänja dig direkt vid dom. De är riktigt bra att använda vid större applikationer. Hittade en guide som du kan läsa igenom.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40