Nahodna cisla a jejich vynechani – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Nahodna cisla a jejich vynechani – .NET – Fórum – Programujte.comNahodna cisla a jejich vynechani – .NET – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Mutagen0
Super člen
11. 1. 2012   #1
-
0
-

Zdravim.

Chtel bych se zeptat jak muzu napsat kod kterej by nahodne generoval cisla od 0 treba do 100 a chtel bych to pouzit jako vyrazovaci metodou neboli kdyz pres Random rand = new Random(); rand.Next(); me vypise treba 12 tak chci aby se pak uz v tom nahodnym vyberu nebyl jestli chapete jak to myslim. proste nahodne mi to bude vybirat cisla ale pokazdy se vybrany cislo jakoby vyradi a uz nebude navyber jakoby.

Diky moc za pomoc.

Nahlásit jako SPAM
IP: 89.190.90.–
Reklama
Reklama
Řešení
crazy
~ Moderátor
+10
Grafoman
11. 1. 2012   #2
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

#1 Mutagen
ukládej si ty vygenerovaná čísla do pole a pak kontroluj jestli se dané číslo v poli už nnachází nebo ne. v .NET nedělám, ale mohlo by to být nějak takto:

Random rand = new Random();
Int32 cislo;
do {
	cislo = rand.Next();
} while(Array.IndexOf(pole, cislo)>0);

uloz cislo do pole
Nahlásit jako SPAM
IP: 147.32.113.–
All you need is vision and time.
Mutagen0
Super člen
11. 1. 2012   #3
-
0
-

Díky moc ;)

Nahlásit jako SPAM
IP: 82.202.104.–
LukoSS
~ Anonymní uživatel
73 příspěvků
11. 1. 2012   #4
-
0
-

Pokud generuješ náhodná čísla v nějakém souvislém intervalu, tak je lepší vytvořit pole bool hodnot, kde každé číslo bude odpovídat určitému indexu v poli. Po vygenerování čísla pak stačí jen testovat, jestli na daném indexu v poli je false, pokud ano, tak to znamená, že dané číslo ještě nebylo použito. Výsledný kód by mohl vypadat nějak takto:

List<int> GenerateRandomNumbers(int min, int max)
{
    int number;
    int length = max - min;
    List<int> randomNumbers = new List<int>(length);
    bool[] indexes;
    Random generator;

    generator = new Random();
    indexes = new bool[length];

    for (int i = 0; i < length; )
    {
        number = generator.Next(min, max);
        if (!indexes[number - min])
        {
            indexes[number - min] = true;
            randomNumbers.Add(number);
            i++;
        }
    }
    return randomNumbers;
}

Tento kód předpokládá, že minimální hodnota bude >= 0

Nahlásit jako SPAM
IP: 88.103.252.–
Mutagen0
Super člen
11. 1. 2012   #5
-
0
-

#4 LukoSS
Toto je zajimavy ;) ...Jenomze sem to vyresil pres obyc pole Ale to je fuk ... Spis mam porblem s prikazem Random ... Nevim proc ale chvili funguje uplne nomrlane a pak zase mi vyhodi error viz obr

Nahlásit jako SPAM
IP: 89.190.90.–
t0mas0
Newbie
11. 1. 2012   #6
-
0
-

Přetekl ti zásobník. Chybu máš asi někde ve vyhodnocení ukončení rekurze. Raději použij while cyklus, je to jistější, že neuvázneš v rekurzi.

Nahlásit jako SPAM
IP: 46.226.16.–
LukoSS
~ Anonymní uživatel
73 příspěvků
11. 1. 2012   #7
-
0
-

Ona je hlavně blbost vytvářet novou instanci třídy Random po každé, když chceš vygenerovat další číslo.

Mimochodem, měl by si proměnným dávat rozumnější jména. Pojmenovat si bool proměnnou jako "TrueOrFalse" není příliš dobrý nápad. 

Nahlásit jako SPAM
IP: 88.103.252.–
Mutagen0
Super člen
11. 1. 2012   #8
-
0
-

#7 LukoSS
Ja vim me zrovna nic jinyho nenapadlo a nechtel jsem tam mit promennou s nazvem abc :D Jinak opraveno Random uz nevytvarim pokazdy znova a uz to jede

Nahlásit jako SPAM
IP: 89.190.90.–
Mutagen0
Super člen
15. 1. 2012   #9
-
0
-

Mam tu novy problem ... Konecne mi to nehazi errory nic ale nektera slova se opakujou ale podle algoritmu by spravne nemelo ...

 Naky rady?

	Random rand = new Random();

        private void RandomIntergral()
        {
            if (IntPlusOne != IntNumberCountTest)
            {
                int IndexRandom = -1;
                if (CzechTesting == true) { IndexRandom = 0; } else { IndexRandom = 1; }
                int RandomNumber = rand.Next(0, IntNumberCountTest);
                if (NumberUsed[RandomNumber] == true) { RandomIntergral(); } else { NumberUsed[RandomNumber] = true; }
                TextBox_Original_Word.Text = WordsField[RandomNumber].Split(',')[IndexRandom];
                RandomNumberForResult = RandomNumber;
            }
        }
Nahlásit jako SPAM
IP: 89.190.90.–
t0mas0
Newbie
16. 1. 2012   #10
-
0
-

Ok přinutil jsi mne na to kouknout:

1. Ta metoda je napsaná příšerně, zasloužila by přepsat.

2.  Pokud se ti nechce přepisovat, mělo by to začít fungovat po malé změně

	Random rand = new Random();

        private void RandomIntergral()
        {
            if (IntPlusOne != IntNumberCountTest)
            {
                int IndexRandom = -1;
                if (CzechTesting == true) { IndexRandom = 0; } else { IndexRandom = 1; }
                int RandomNumber = rand.Next(0, IntNumberCountTest);
                if (NumberUsed[RandomNumber] == true) { RandomIntergral(); RETURN; } else { NumberUsed[RandomNumber] = true; }
                TextBox_Original_Word.Text = WordsField[RandomNumber].Split(',')[IndexRandom];
                RandomNumberForResult = RandomNumber;
            }
        }

Ale opravdu doporučují ji PŘEPSAT!!

Nahlásit jako SPAM
IP: 46.226.16.–
Mutagen0
Super člen
16. 1. 2012   #11
-
0
-

#10 t0mas
Dík

Nahlásit jako SPAM
IP: 89.190.90.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 39 hostů

Podobná vlákna

Nahodna cisla — založil CommanderZ

Náhodná čísla — založil Petr

Náhodná čisla — založil Zke

(pseudo)náhodná čísla — založil Noneus

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý