Avatar
Peto
Člen
Avatar
Peto:

Nazdar , viete mi niekto poradiat ako mam vytvorit 7 nahodnych cisel od 1 do 7 ? Nieco mam ale je to strasne pomale. Vdaka za vsetko.

 
Odpovědět 7. dubna 15:37
Avatar
Taskkill
Redaktor
Avatar
Taskkill:

cyklus a Math.random() * (max - min) + min;

reference:
https://developer.mozilla.org/…/Math/random

Editováno 7. dubna 16:36
 
Nahoru Odpovědět 7. dubna 16:36
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Taskkill
Taskkill:

nebo spis tohle

ve foru pro sedm okruhu ((Math.floor(Mat­h.random() * 10) % 7 ) + 1)

 
Nahoru Odpovědět  -1 7. dubna 16:48
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na Taskkill
Drahomír Hanák:

Tohle podle mě není úplně správně. Předpokládejme, že Math.floor(Math.random() * 10) vrátí číslo od 0 do 9 každé s pravděpodobností 1 / 10. Potom pravděpodobnost, že dostaneme 0, 1 nebo 2 je 2 / 10 (pro 0 buď padne 0 nebo 7, pro 1: 1 nebo 8, pro 2: 2 nebo 9). Čísla od 3 do 6 včetně ale mají menší pravděpodobnost (1 / 10).

 
Nahoru Odpovědět  +1 7. dubna 17:11
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Drahomír Hanák
Taskkill:
Math.floor((Math.random() * 7)) + 1

by mohlo zlepsit situaci

Editováno 7. dubna 17:25
 
Nahoru Odpovědět  +2 7. dubna 17:24
Avatar
Peto
Člen
Avatar
Peto:

Diky za rady , ale zabudol som povedat ze sa nesmu opakovat. Mam nieco taketo ale pri kontrole ci sa prvok nachadza v poli sa to dlho porovnava pretoze sa musi vygenerovat cislo ktore tam este nie je.

var pole = new Array();
var i = 0;
function urob(){
        if (i < 7) {
                var random =  Math.floor(Math.random()*7);
                test = inArray(random,pole);
                if (test==true){
                }else{
                        pole.push(random);
                        console.log(random);
                        i++;
                }

        }else{
                clearInterval(myVar);
                console.log('koniec');
        }
}
function inArray(prvok,pole){
        var length = pole.length;
        for(var i = 0; i < length; i++){
                if(pole[i] == prvok) return true;
        }
        return false;
}
Editováno 8. dubna 11:33
 
Nahoru Odpovědět 8. dubna 11:32
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Peto
Taskkill:

takze to shrnu, chces ziskat pole sedmi cisel z nichz kazde cislo je v rozsahu od 1 do 7 a je unikatni ... pak nechces vubec generovat nahodna cisla, ale poradi stanovenych cisel, takze potrebujes pool, mnozinu ze ktery budes brat cisla, to bude pole o sedmi prvcich (vsechna tvoje cisla klidne serazena, klidne rozhazena, to je asi fuk, ja budu rikat ze jsou serazeny od 1 do sedmi ... pak potrebujes druhy pole, ktery symbolizuje vyslednou mnozinu... do ni budes cisla z poolu hazet a ted k proces vyberu,

pro zjednoduseni ja budu z poolu odmazavat vzdy ten prvek, ktery jsem vybral, je to vizualne zretelnejsi

zde je kod:

var pool = [1, 2, 3, 4, 5, 6, 7]; // mnozina pro vyber
var randArr = []; // tvoje budouci pole

while (pool.length) { // dokud je v poolu co brat
  var ranIn = Math.floor((Math.random() * pool.length)); // nahodny int v rozsahu indexu poolu, poslouzi jako index prave zvoleneho prvku
  randArr.push(pool[ranIn]); // do vysledku ulozim vybranou hodnotu
  pool[ranIn] = 0; // vybranou hodnotu oznacim jako pouzitou, vim, ze nula tam byt nemuze, tak pouziju nulu

  repairArr(pool, 0); // pool musim opravit, sesunout vsechny prvky napravo od nuloveho prvku a snizit o jedna velikost pole
}

console.log("pole " + randArr); // vypis vysledku

// opravna funkce, muze vypadat i jinak, vice, ci mene, tahle odvede praci dobre, je tu prostor pro optimalizaci, ale to uz je an tobe ;-)
function repairArr(array, wrongElement) {
  var move = false;
  for (var e = 0; e < array.length - 1; e++) {
    if (array[e] == wrongElement) {
      move = true;
    }
    if (move) {
      array[e] = array[e + 1];
    }
  }
  array.length -= 1;
}

tady je fiddle: https://jsfiddle.net/…ll/1ee4brn3/

PS: priste pouzij tlacitko odpovedet, kdybych se neprochazel po hlavni strance,vubec bych si nevzpomnel, ze bys mohl jeste neco chtit

Editováno 8. dubna 17:05
Akceptované řešení
+20 Zkušeností
Řešení problému
 
Nahoru Odpovědět 8. dubna 17:04
Avatar
Peto
Člen
Avatar
Peto:

Kamo diky moc, vyzera to presne ako to potrebujem , ak by cosi este napisem ale mega si mi pomohol DAKUJEM

 
Nahoru Odpovědět 9. dubna 1:05
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Peto
Taskkill:

Pokud jsem pomohl, můžeš mi to oplatit tím, že moje finální řešení označíš jako řešení vlákna, samozřejmě po tom, co se ujistíš, že všechno šlape a už nepotřebuješ nic víc.

PS: vážně zkus klepnout na to tlačítko odpovědět, ono to dá vědět člověku, na kterého reaguješ, já bych si toho nevšiml kdybych si nedával pozor na vlákna, ve kterých píšu.

 
Nahoru Odpovědět 9. dubna 11:54
Avatar
Peto
Člen
Avatar
Odpovídá na Taskkill
Peto:

Chcel som sa este opytat ci mi nevies nejako s tymto pomoct ? mam taky problem, mam tlacitko a potrebujem aby sa po jeho zakliknuti postupne zobrazovali cisla od 1 do 7 a potom sa vypisal nejaky oznam. to mam zabezpecene tak ze volam tvoju funkciu cez setInterval (funkcia). Lenze takto sa mi vygeneruje hned cele pole, ale ja potrebujem aby isli pismena po jednom,no ked tam dam break tak za nim uz nemozem nic vypisat. A potreboval by som aby sa po znovu kliknuti znova vypisovali tie cisla no povodne pole je uz prazdne.

 
Nahoru Odpovědět 9. dubna 14:39
Avatar
Peto
Člen
Avatar
Odpovídá na Taskkill
Peto:

Uz som to spravil, tak este raz diky moc

Editováno 9. dubna 15:10
 
Nahoru Odpovědět 9. dubna 15:07
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Peto
Taskkill:

Jasne, bylo mi jasny, ze to tak nejak dopadne. Je tu vic moznosti jak to udelat, mrkni na tenhle fiddle https://jsfiddle.net/…ll/1ee4brn3/ (je to ten samej, ale upravenej) ... pokud se nepletu je to to co hledas, setTimeout v cyklu zajisti postupne vypsani hodnot pomoci odebirani z konce... aby neslo tlacitko zmacknout znova hned za sebou (protoze to by se ti tam zacali ty cisla psat dost blaznive) pri stisknuti se nejdriv talcitko zablokuje, provede se nastaveni a pak se naplanuje jeho odblokovani az po poslednim zobrazeni, jeste muzes pridat to, ze ten div do kteryho to budes zobrazovat se na zacatku vzdycky vynuluje, to je na tobe... doufam, ze takhle je to ono.

EDIT: ted vidim, ze uz jsi to vyresil, necham to i tak tady, treba to nakonec k necemu jednou bude.

Editováno 9. dubna 15:28
 
Nahoru Odpovědět 9. dubna 15:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.