quz0r Skrevet 14. november 2008 Skrevet 14. november 2008 Jeg har skrevet et program i C#, var egentlig meninge å bare teste random funksjonen, så hvor jevn den spredte tallene, men det viste seg at jeg kom over et merkelig problem. Programmet fungerer akkurat slik det skal når jeg legger ett debugpoing (bruker Microsoft Visual C# 2008) inne i loopen, men med en gang jeg kjører programmet på vanlig måte blir alle verdiene i arrayen den samme verdien. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Oppgaves140 { class Program { public static int RandomTall() { Random generator = new Random(); int tall = generator.Next(0, 100); return tall; } static void Main(string[] args) { int[] teller = new int[101]; int[] tall = new int[10]; string resultat = null; for (int i = 0; i < tall.Length; i++) { tall[i] = RandomTall();// Må ha debug point her } for (int i = 0; i < tall.Length; i++) { resultat += tall[i] + "\n"; } for (int k = 0; k < tall.Length; k++) { for (int j = 0; j <= 100; j++) { if (tall[k] == j) { teller[j] += 1; int test = teller[j]; break; } } } for (int t = 0; t < teller.Length; t++) { resultat += "Antall " + t + ": " + teller[t] + "\n"; } Console.WriteLine(resultat); Console.ReadLine(); }//slutt main } } Ser noen noe feil? Eller hvorfor programmet oppfører seg så merkelig.
Manfred Skrevet 14. november 2008 Skrevet 14. november 2008 Det er fordi du oppretter en ny Random()-klasse for hver gang. For å få randomverdier kjører du gjennom en løkke med next int[] arr = new int[10]; Random random = new Random(); for(int i = 0; i < 10; i++) { arr[i] = random.Next(0,100); }
quz0r Skrevet 16. november 2008 Forfatter Skrevet 16. november 2008 Det er fordi du oppretter en ny Random()-klasse for hver gang. For å få randomverdier kjører du gjennom en løkke med next int[] arr = new int[10]; Random random = new Random(); for(int i = 0; i < 10; i++) { arr[i] = random.Next(0,100); } Vet at jeg kan gjøre dette på flere måter, men i oppgaven jeg gjør står det at jeg skal lage en funksjon. Spørsmålet er hvorfor programmet oppfører seg riktig når jeg legger inn ett debugpoint i for-loopen, mens når jeg kjører det uten debugpoint blir alle tallene i arrayen like.
Manfred Skrevet 16. november 2008 Skrevet 16. november 2008 Fordi "new Random()" bruker klokken som seed. Når du har et debug point, så blir det en liten pause... Når du kjører programmet går det for kjapt, så de får samme seed, regner jeg med. Men da kan du jo bare: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Oppgaves140 { class Program { Random generator; public Program() { generator = new Random(); } public static int RandomTall() { return generator.Next(0, 100); } static void Main(string[] args) { int[] teller = new int[101]; int[] tall = new int[10]; string resultat = null; for (int i = 0; i < tall.Length; i++) { tall[i] = RandomTall();// Må ha debug point her } for (int i = 0; i < tall.Length; i++) { resultat += tall[i] + "\n"; } for (int k = 0; k < tall.Length; k++) { for (int j = 0; j <= 100; j++) { if (tall[k] == j) { teller[j] += 1; int test = teller[j]; break; } } } for (int t = 0; t < teller.Length; t++) { resultat += "Antall " + t + ": " + teller[t] + "\n"; } Console.WriteLine(resultat); Console.ReadLine(); }//slutt main } } You see?
Svish Skrevet 24. november 2008 Skrevet 24. november 2008 hehe. klassisk problem. *mimre tilbake til 1.klasse på høyskolen hvor jeg selv slet en stund med akkurat det samme*
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å