Techster Skrevet 30. november 2011 Del Skrevet 30. november 2011 (endret) Koden under viser en enkel sak som lager en kort tilfelding string som skal være unik i forhold til de andre som er lagd før. Problemet er at den ikke lager tilfeldige strenger, men gir følgende output: yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue yextue uolyog egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug egpjug jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui jjhyui sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai sblkai olypul olypul olypul olypul olypul olypul olypul olypul olypul olypul olypul olypul Altså, en del helt klart ikke unike strenger. Hvis jeg debugger programmet, blir det riktig, men ikke hvis det kjøres utenfor. private static string[] bokstaver = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; private static StringBuilder sb; private static Dictionary<string, string> dict = new Dictionary<string, string>(); public static void Main(string[] args) { for (int i = 0; i < 100; i++) { string s = Neste(6); Console.WriteLine(s); } Console.ReadLine(); } private static string Neste(int lengde) { sb = new StringBuilder(); Random r = new Random(); do { for (int i = 0; i < lengde; i++) { sb.Append(bokstaver[r.Next(0, 25)]); } } while (dict.ContainsValue(sb.ToString())); return sb.ToString(); } } Endret 30. november 2011 av Techster Lenke til kommentar
geir__hk Skrevet 30. november 2011 Del Skrevet 30. november 2011 Jeg vet dette ikke er den fineste løsninga, men da jeg hadde tilsvarende prblemstilling i vbs så løste jeg dette ved å legge inn en random tidsforsinkelse melom hver iterasjon. Men hvis det er snakk om et meget stort antall iterasjoner, så må nok andre metoder tas i bruk. Lenke til kommentar
Techster Skrevet 30. november 2011 Forfatter Del Skrevet 30. november 2011 Jeg vet dette ikke er den fineste løsninga, men da jeg hadde tilsvarende prblemstilling i vbs så løste jeg dette ved å legge inn en random tidsforsinkelse melom hver iterasjon. Men hvis det er snakk om et meget stort antall iterasjoner, så må nok andre metoder tas i bruk. Yes, det er forsøkt og det virker. Men det er jo akkurat samme koden som kjører i samme rekkefølge som gjør at det er så veldig merkelig! Lenke til kommentar
Techster Skrevet 30. november 2011 Forfatter Del Skrevet 30. november 2011 Jeg vet dette ikke er den fineste løsninga, men da jeg hadde tilsvarende prblemstilling i vbs så løste jeg dette ved å legge inn en random tidsforsinkelse melom hver iterasjon. Men hvis det er snakk om et meget stort antall iterasjoner, så må nok andre metoder tas i bruk. Yes, det er forsøkt og det virker. Men det er jo akkurat samme koden som kjører i samme rekkefølge som gjør at det er så veldig merkelig! Hehe, ser jeg hadde glemte en ting; dict.add(i.tostring(), s); Lenke til kommentar
etse Skrevet 30. november 2011 Del Skrevet 30. november 2011 problemet ditt er at random ikke er tilfeldig, den er psaudo-tilfeldig basert på variabler. Gitt 1 og samme seed vil random gjøre det samme hver gang; om du ikke manuelt setter inn en seed så vil seeden ble laget ut i fra ulike variabler som f.eks. system-tiden. Kort fortelt er problemet at du i hver iterasjon av løkken lager en ny instans av "Random"-klassen og bruker denne. Dette gjør at du seeder den hver gang, og siden ting skjer så fort etter hverandre bruker den samme seed mange ganger. En mulig løsning ville f.eks. vært slik: private static string[] bokstaver = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; private static StringBuilder sb; private static Dictionary<string, string> dict = new Dictionary<string, string>(); private static Random r = new Random(); public static void Main(string[] args) { for (int i = 0; i < 100; i++) { string s = Neste(6); Console.WriteLine(s); } Console.ReadLine(); } private static string Neste(int lengde, Random r) { sb = new StringBuilder(); do { for (int i = 0; i < lengde; i++) { sb.Append(bokstaver[r.Next(0, 25)]); } } while (dict.ContainsValue(sb.ToString())); return sb.ToString(); } } 1 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å