Generator Losowych napisów

0

Witam, mam pewnien problem z Generatorem Losowych napisów, napisalem skrypt ktory ma wyswietlac losowe znaki z 6 literami, nie wiem dlaczego ale wyświetla tylko 1 znak po czym program się kończy, skrypt : `` <script>

var alfabet = "abcdefghijklmnopqrstuvwxyz";
var RandomChain = "";
var alfabeta = alfabet[Math.floor(Math.random()*alfabet.length)];

while(RandomChain<6)
{
RandomChain += alfabeta;
console.log(RandomChain);
alfabeta++;
}

</script>``

2

To co napisałeś jest bez sensu:
a) sprawdzasz czy string RandomChain. jest mniejszy od liczby
b) inkrementujesz string alfabeta

Przykładowe rozwiązanie:

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min
}

function getRandomChar() {
  return String.fromCharCode(getRandomInt(97, 122))
}

function getRandomWord(length) {
  let result = ''
  
  while (length) {
    result += getRandomChar()
    length--
  }

  return result
}

console.log(getRandomWord(6))

Demo: https://codepen.io/caderek/pen/rmgLoo?editors=0012

0

Dzięki, dopiero uczę się programować w jscript z tej książki: http://pepa.holla.cz/wp-content/uploads/2015/11/JavaScript-for-Kids.pdf i na stronie 130 w 2 zadaniu było napisane bym użył tych komend co są napisane w podpowiedziach, czy jest jakaś możliwość na zrobienie tego skryptu poprzez te komendy?

0

No jest - napisałem Ci gdzie masz błędy (przynajmniej część).

0

Ok, mam jeszcze jedno pytanie, mógłbyś mi napisać jak mogę sprawdzić a) sprawdzasz czy string RandomChain. jest mniejszy od liczby znaczy mam na myśli jakie komendy mógłbym użyć, czy muszę zrobić to w pętli?

1

Użyj właściwości length:

RandomChain.length < 6
0

Ok, a jest możliwość dodawania nowych losowych liter do łańcucha dopóki ten łańcuch jest mniejszy niż liczba? bo za każdym razem gdy odświeżam skrypt pojawiają się te same litery np. yNaNNa, bNaNNa, a nie losowe, jaką komendą lub działaniem mógłbym to naprawić?

0

No bo patrz punkt b) - inkrementujesz string (dlatego dostajesz NaN - not a number), co twoim zdaniem ma to zrobić: alfabeta++;? Zrób sobie osobną zmienną jako licznik.

0

Ok, zacząłem inkrementować licznik i teraz wyskakują tylko takie same litery np:"cccccc" jest jakis sposob lub działanie by dodać randomowe litery do tego łańcucha,?

0

A jak teraz wygląda Twój kod? Bo zgaduję, że tylko raz liczba jest losowana do jakiejś zmiennej, którą potem używasz bez zmieniania jej wartości.
Jeżeli wygląda tak jak w pierwszym poście to wiedz, że losowanie nie będzie następowało za każdym użyciem zmiennej a tylko podczas uruchomienia skryptu.

0

``<script>

var alfabet = "abcdefghijklmnopqrstuvwxyz";
var RandomChain = "";
var licznik = 0;
var alfabeta = alfabet[Math.floor(Math.random()*alfabet.length)];

while(RandomChain.length<6)
{

RandomChain += alfabeta;
console.log(RandomChain);
licznik++
}

</script>`` to jest mój aktualny skrypt, nie mam pojęcia co robię źle, że właśnie taki jest rezultat ;/

0

No to tak jak pisałem wyżej - tylko za pierwszym razem (pierwszym uruchomieniem skryptu) jest losowana liczba, potem używasz tej samej wartości jako index tablicy.
Dlaczego nie użyjesz kodu z 2ego postu?

0

http://pepa.holla.cz/wp-content/uploads/2015/11/JavaScript-for-Kids.pdf uczę się z tej książki i na stronie 130 w 2 zadaniu jest napisane bym stworzył skrypt posługując się tymi komendami co już poznałem.

Nie za bardzo wiem jak to zrobić, mógłbyś podać jakiś przykład lub komendy którymi mógłbym zrobić drugie losowanie i dodać to każdej wartości?

1

Rozwiązanie 1:
2gi post w tym temacie. Nadal nie rozumiem dlaczego nie chcesz go używać.

Rozwiązanie 2:

var alfabet = "abcdefghijklmnopqrstuvwxyz";
var RandomChain = "";
var licznik = 0;
var alfabeta = function() 
{
	return alfabet[Math.floor(Math.random()*alfabet.length)]
}

while(RandomChain.length<6)
{
	RandomChain += alfabeta();
	console.log(RandomChain);
	licznik++
}
0

Dzięki, nie poznałem jeszcze funkcji przed tym zadaniem, więc chyba coś jest z książką nie tak(nie chciałem używać 1 kodu, bo chciałem przeanalizować książkę krok po kroku żeby bardziej zrozumieć programowanie w js), ponieważ trzeba tutaj było użyć function i return których jeszcze nie poznałem, tak czy siak dzięki wam za pomoc :D, temat do zamknięcia

0

No możesz się obyć bez użycia funkcji bez problemu - organizowanie kodu w funkcje jest po prostu lepsze, a nie napisałeś, że ma być bez nich - stąd mój przykład. Jak chcesz coś zrobić wielokrotnie (losowanie znaku) to zawrzyj to po prostu w pętli:

var alfabet = "abcdefghijklmnopqrstuvwxyz";
var RandomChain = "";
 
while(RandomChain.length < 6) {
  RandomChain += alfabet[Math.floor(Math.random()*alfabet.length)];
}

console.log(RandomChain);

PS
No i nie wiem po co Ci tam licznik, skoro nie używasz go do sprawdzenia warunku pętli - usunąłem powyżej.

0

Dzięki, tak na razie wszystko mi się gubi trochę, bo uczę się od tygonia i po prostu nie wiedziałem jak to zrobić i jakimi komendami, teraz juz powoli to rozumiem, jeszcze raz dzięki za pomoc ;d

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