Ciagle generuje mi tą samą liczbę.

0

Mam problem, stworzyłem prostą grę która wyświetla liczby z podanego zakresu z wyjątkiem jednej losowej. Jednak problem polega na tym, że z każdym uruchomieniem komputer generuje tą samą liczbe. Jak rozwiązać ten problem ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp5
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Witaj, za chwile wyswietlą się liczby, a ty musisz zgadnąć której zabrakło. Powodzenia ;) ");
            int ilosc;
            int proba;

            Console.WriteLine("Podaj ile liczb ma sie wyświetlic");
            ilosc=Convert.ToInt32(Console.ReadLine());
            Console.Clear();
            Random losowa = new Random(); // Generowanie liczby ktora ma sie nie wyswietlic
            int los = losowa.Next(1, ilosc);

            for (int i=1;i<=ilosc;i++)
            {
                if (i == los) Console.WriteLine();
                else Console.WriteLine(i);
                System.Threading.Thread.Sleep(200);
                Console.Clear();
            }

            Console.WriteLine("Jak myslisz, ktora liczba sie nie wyswietlila?");
            proba = Convert.ToInt32(Console.ReadLine());

            if (proba == los) Console.WriteLine("Brawo, udało ci się !");
            else Console.WriteLine("Niestety, przegrałeś ...");





            Console.ReadKey();

        }
    }
}```
0

Jaką ilość podajesz na wejściu? Bo sprawdziłem u siebie i nie mam takich problemów.

0

U mnie też działa. Możesz ewentualnie losować w inny sposób, np. tak:

 using (RNGCryptoServiceProvider rg = new RNGCryptoServiceProvider())
 {
     byte[] rno = new byte[5];
     rg.GetBytes(rno);
     los = BitConverter.ToUInt32(rno, 0);

     float rnd = los;

     rnd *= (float)ilosc / UInt32.MaxValue;
     los = (uint)rnd;
     los += 1;
}

zmień jeszcze int los; na uint los;

0

Albo jak wyżej -> dobry/wolny generator liczb pseduolosowych (uzywa np przy RSA i na potrzeby Crypto) RNGCryptoServiceProvider albo klasyczny Random tylko uzyj ziarna
Np (to nie jedyne rozwiązanie).:
Random rnd = new Random((int)DateTime.Now.Ticks);

P

0

Nie wiem na czym polegał problem, ale zniknął po ponownym włączeniu komputera. Tak czy siak, dzięki wielkie ;)

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