16. januar 2014 - 13:44Der er
15 kommentarer og 1 løsning
Terning eksempel virker ikke
Hej eksperter
Jeg sidder med et simpelt eksempel med en terning og et raflebæger (koden er nedenfor).
Det virker ikke helt efter hensigten, da alle terningerne i bægret har den samme værdi hver gang der slås et slag. Eksempelvis 444, 333, 666, 111, 333, 333 .... m.m.
Hvad skyldes det?
Hilsen Brian
Koden:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections;
namespace Die { class Program { static void Main(string[] args) { DieCup cup = new DieCup(); for (int i = 0; i < 10; i++) { Console.WriteLine(cup.roll()); } } }
class DieCup { ArrayList list = new ArrayList(); public DieCup() { for (int i = 0; i < 3; i++) { list.Add(new Die()); } }
public String roll() { String s = ""; foreach (Die d in list) { d.roll(); s += d.roll(); } return s; } }
class Die { Random rand = new Random(); public int roll() { return rand.Next(1, 7); } } }
De fleste random funktioner i programmeringssprog laver et tilfældigt tal ud fra tidspunktet. Dvs. hvis du kører rand-funktionen flere gange i træk, uden millisekundet har nået at skifte, får du samme tal ud hver gang.
Hvis du laver et nyt Random objekt for hver gang du bruger det, og parser forskellige tal ind i constructoren, f.eks new Random(123); new Random(987), osv. så burde du få forskellige resultater.
Glem i øvrigt mit svar - skal ikke have point:D HKW havde skrevet præcis det med static OG det er pænere end thread.sleep.. ikke det store problem lige i dette projekt, men i mange andre situationer er det pænt upraktisk at lave sleep for sådan en funktion:D
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.