C# i Random() - wybierana jest ta sama liczba w dwóch różnych klasach

0

Problem wygląda tak - w klasie Ludzie tworzę nową losową - wybiera liczbę losową. Potem w klasie Dodatki tworzę kolejną losową, tylko ta zawsze przyjmuje wartość identyczną do tej w klasie Ludzie, i vice versa. Dlaczego tak się dzieje, i jak to naprawić?

Bardziej interesująca jest już druga część kodu (klasy Ludzie i Dodatki);

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Ludzie lud = new Ludzie();
            Dodatki dod = new Dodatki();

            string l = lud.returnLudzie();
            string d = dod.returnDodatek();

            MessageBox.Show(l + " " + d + " ");
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Ludzie lud = new Ludzie();
            Dodatki dod = new Dodatki();

            string l = lud.returnLudzie();
            string d = dod.returnDodatek();

            textBox2.Text = textBox2.Text + (l + " " + d);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //tu coś bedzie
        }
    }



    class Ludzie
    {
        const string ludzie = "data/lud.txt";

        private int _numberOfLines(string path)
        {
            int lineCount = File.ReadAllLines(path).Length;
            return lineCount;
        }
        public string returnLudzie()
        {
            Random l = new Random();
            int b = l.Next(0, _numberOfLines(ludzie));
            string[] lud = File.ReadAllLines(ludzie);
            return lud[b];
        }

    }


    class Dodatki
    {
        const string dodatki = "data/dod.txt";

        private int _numberOfLines(string path)
        {
            int lineCount = File.ReadAllLines(path).Length;
            return lineCount;
        }

        public string returnDodatek()
        {
            Random r = new Random();
            int a = r.Next(0, _numberOfLines(dodatki));
            string[] dod = File.ReadAllLines(dodatki);
            return dod[a];
        }
    } 
2

I tak będzie, nowa zmienna typu Random jest tworzona o tym samym czasie co poprzednia (jedna po drugiej), wyniki z tych zmiennych będziesz miał identyczne. Najprościej rozwiązać to tak, żeby wartości pobierać z tej samej instancji Random.

Na szybko: Utwórz jeden globalny Random i z niego pobieraj.

Powodzenia.

1

Zrób jednego Random'a dla obu klas. W singletonie np.

class Singleton {
    private static Singleton _instance;
    public static Singleton Instance {
        get {
            if (_instance == null) _instance = new Singleton();
            return _instance;
        }
    }

    public Random Rnd { get; }
    private Singleton() { this.Rnd = new Random(); }
}

Tutaj masz przyczynę: http://stackoverflow.com/questions/14673876/multiple-random-numbers-are-the-same

0

Dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1