Grunden til at det skal være i en singleton klasse er at det kun må ske én gang pr. program start, jeg er bare ikke så god til at forstå hvordan man bruger den, men håber min fortløbige kode er ok :)
lige nu er jeg ude i at hente alle navnene på heste i en arraylist, og ville så køre en random på indholdet, men jeg ved ikke hvordan jeg får random på en arraylist eller hvordan jeg sikre at det ikke er flere af samme navn?
KODE: public class SingletonHeste { private static SingletonHeste instance;
protected SingletonHeste() { Random valgteHeste = new Random(); //opret et XML object XmlDocument doc = new XmlDocument(); //hente heste.xml til XML objectet doc.Load("Heste.xml");
//hent antallet af heste tilrådighed int m_count = doc.GetElementsByTagName("hest").Count;
//array for at holde de heste der er tilrådig før der vælges de løbende heste til spillet. ArrayList loebendeHeste = new ArrayList(); //hestenavne fra xml fil hentes op i dette array string[] hesteNavn = new string[m_count]; //for at random virker med int har jeg et andet array som har 0-antallet af heste i xml fil. //int[] hesteId = new int[m_count]; // Løbe gennem XML for (int i = 0; i < m_count; i++) { XmlNodeList heste = doc.GetElementsByTagName("hest"); foreach (XmlNode hest in heste) { hesteNavn[i] = hest.InnerText.ToString(); //hesteId[i] = i; } } loebendeHeste.Add(hesteNavn); //loebendeHeste.Add(hesteId);
valgteHeste.Next(m_count); } public static SingletonHeste Instance() { if (instance == null) { instance = new SingletonHeste(); } return instance; } }
Håber en har et bud på en løsning, tror je ghar gjort det en del mre besværligt end det måske er?
hvis du gemmer hver hest du læser ind i en ArrayList eller List<string> eller List<Hest> så kan du trække et random nummer fra 0 til Count-1 og vælge den hest
du kan teste for om den allerede er i listen med Contains
Hej arne_v - håbede på at du ville give lyd, det er altid positivt og inspirerende.
jeg forstår godt hvad du mener og den tanke er jeg også i, men i koden herover har jeg bygget en ArrayList op som nu indeholder alle heste fra min xml fil.
Men jeg kan ikke regne ud hvordan jeg skal lave løkken med random for at vælge den positions hest.
det med at tjekke med contains - den del tror jeg også jeg kan komme videre med.
kan du give et kort eksempel på hvordan du ville bruge random mod en ArrayList?
List<Hest> alleheste = new List<Hest>(); // parse XML og kalde alleheste.Add(new Hest(navn,bla,bla) Random rng = new Random(); Hest randomhest = alleheste[rng.Next[alleheste.Count]];
jeg har denne kode: først hentning af heste fra xml fil til List<Hest> og fylde listen op med værdier. dernæst trække random ud, men det går ikke særlig godt :(
//opret et XML object XmlDocument doc = new XmlDocument(); //hente heste.xml til XML objectet doc.Load("Heste.xml"); //hent antallet af heste tilrådighed int m_count = doc.GetElementsByTagName("hest").Count; List<Hest> alleheste = new List<Hest>(); // Løbe gennem XML for (int i = 0; i < m_count; i++) { XmlNodeList heste = doc.GetElementsByTagName("hest"); foreach (XmlNode hest in heste) { alleheste.Add(new Hest(hest.InnerText.ToString())); } }
}
private static Random rng = new Random();
for (int i = 0; i < 13; i++) { Hest randomhest = alleheste[rng.Next[alleheste.Count]]; }
jeg får den fejl på List<Hest> : Error 1 The type or namespace name 'Hest' could not be found (are you missing a using directive or an assembly reference?)
int m_count = doc.GetElementsByTagName("hest").Count; //klargøre et List object som kan indeholde alle hestene fra XML filen ArrayList alleheste = new ArrayList(); // Løbe gennem XML for (int i = 0; i < m_count; i++) { XmlNodeList heste = doc.GetElementsByTagName("hest"); foreach (XmlNode hest in heste) { //alleheste.Add(new Hest(hest.InnerText.ToString())); alleheste.Add(hest.InnerText.ToString()); } }
//gør det 12 gange for at få 12 heste at spille på for (int i = 0; i < 12; i++) { //tillæg den random valgte hest til den nye List valgte.Add(alleheste[rng.Next(alleheste.Count)]); //fjern den valgte hest fra original List, så den ikke kan vælges igen alleheste.Remove(alleheste[rng.Next(alleheste.Count)]); }
efter at have læst din artikel om Singleton, lykkes det mig også at få styr på den del, tak.
Det eneste som ikke rigtig virker er at den ikke tager den hest væk som den har hentet op, så den samme hest kan godt komme 2 gange, har u en ide hvorfor?
for (int i = 0; i < 12; i++) { int ix = rng.Next(alleheste.Count); //tillæg den random valgte hest til den nye List valgte.Add(alleheste[ix]); //fjern den valgte hest fra original List, så den ikke kan vælges igen alleheste.Remove(alleheste[ix]); }
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.