• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JS pętle, losowanie bez powtórzeń

Aruba Cloud - Virtual Private Server VPS
+1 głos
1,272 wizyt
pytanie zadane 1 października 2020 w JavaScript przez Nowacx02 Obywatel (1,060 p.)

Witam robię sobie algorytm w js na losowanie bez powtórzeń. Kod wygląda następująco:

<!DOCTYPE html>

<html>
	<head>		
	</head>
	
	
	<body>
		
	<script>
	var tab = new Array(10);
	
	
	for(var i=0; i<10; i++)
	{
	tab[i] = Math.floor(Math.random()*10);
	var r = tab[i];
	for(var a=0; a<i; a++)
                    {
                       if(r==tab[a])
                       {
                       tab[a]= Math.floor(Math.random()*10);
                       r = tab[a];
                       a=-1;		/* TUTAJ JEST PROBLEM*/
                       }
                    }
					
		document.write( tab[i] + "</br>");			
	}		
	</script>	
	</body>
</html>

Gdy uruchamiam stronę cały czas mam ładowanie i wywala mi chrome. Jednak gdy usunę w pętli a=-1 strona uruchamia się, no ale wtedy liczby są losowane z powtórzeniami. Zmiana zmiennej a na inną liczbę nie skutkuje niczym. Co może być przyczyną problemu?

2 odpowiedzi

0 głosów
odpowiedź 1 października 2020 przez Nowacx02 Obywatel (1,060 p.)

Jestem jednak debilem. Znalazłem przyczynę problemu. W pętli ze zmiennymi " a " zapomniałem zmienić wartość na " i ". Pozdrawiam.

if(r==tab[a])
                       {
                       tab[i]= Math.floor(Math.random()*10);
                       r = tab[i];
                       a=-1;       
                       }

 

komentarz 1 października 2020 przez VBService Ekspert (256,600 p.)
edycja 1 października 2020 przez VBService

Spróbuj a = -1; na a--;

0 głosów
odpowiedź 1 października 2020 przez VBService Ekspert (256,600 p.)
edycja 1 października 2020 przez VBService

Zmienna a w Twoim kodzie służy "inkrementacji" w pętli

for(var a=0; a<i; a++) {  . . .  }

ten zapis powoduj, że pętla staje się nieskończona:

a=-1;        /* TUTAJ JEST PROBLEM*/

po każdym zwiększeniu wartości w zmiennej a:

. . . ; a++) {  . . .  }

ustawiasz ją na -1. W taki sposób "zapętlony" kod, "wywala" przeglądarkę.

Tu jest za symulowanie tego efektu, co zrobiłeś w sposób, który nie "wywali" przeglądarki CodePen

let loop = 0;
let a=0;

setInterval(() => {
  console.clear();
  console.log('Loop: ',++loop)
  a++;
  console.info(a)
  a=-1;
  console.warn(a)  
}, 2000)

10 pseudo-losowych, unikalnych liczb od 1 do 100, w kolejności od najmniejsze do największej CodePen

<style>
#board {
  font: 1.1em monospace;
  line-height: 10vh;
  height: 10vh;
}
</style>
<body>
  <pre id="board"></pre>
  <button id="generate">Generuj</button>
</body>
<script>
const board = document.getElementById('board');
const b_generate = document.getElementById('generate');

b_generate.addEventListener('click', () => {
  board.textContent = randomUnique(10,1,100);
})

function randomUnique(length, min, max) {
  let result = [];
 
  while (result.length < length) {
    let num = Math.floor(Math.random() * (max - min + 1)) + min;
    if (result.indexOf(num) == -1) result.push(num);
  }
   
  return result.sort((a,b) => { return a-b; }); 
}
</script>

 

Podobne pytania

0 głosów
2 odpowiedzi 237 wizyt
0 głosów
2 odpowiedzi 423 wizyt
pytanie zadane 21 marca 2017 w C i C++ przez seba Dyskutant (8,900 p.)
0 głosów
2 odpowiedzi 509 wizyt

93,329 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,662 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...