Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida em relação a explicação da aula vs exercício

Boa noite, não entendi muito bem, visto que na aula foi exemplificado que ao usar o Math.random multiplicado por 10 ou 100, seu objetivo era pelo fato de convertê-los para números inteiros com 1 ou 2 casas decimais antecedendo a vírgula. Inclusive tem na transcrição da aula:

"Mônica: Como multiplicamos a linha do Math.random()** por 10, porque queríamos que passasse uma casa decimal para a direita**, uma vez que já tinha uma, nós obtivemos um número com duas casas decimais. ** Quando chegamos no 100, queremos três. Por isso, acredito que podemos multiplicar por 100; assim, teremos números com três dígitos até o 100.**

O exercício teve o raciocínio bem divergente da explicação. Se alguém puder esclarescer, ficarei grata.

5 respostas

A explicação fornecida na aula parece estar correta. Normalmente, quando multiplicamos o resultado de Math.random() por um número (por exemplo, 10 ou 100), o objetivo é ajustar o intervalo de valores gerados e, muitas vezes, obter números inteiros após a conversão.

No caso do seu código, ao multiplicar Math.random() por 4 e adicionar 1, você está tentando gerar um número inteiro entre 1 e 4. No entanto, na transcrição da aula, parece que foi sugerido multiplicar por 10 ou 100 para obter números com uma ou duas casas decimais

Neste caso, Math.floor é utilizado para arredondar para o número inteiro mais próximo. Essa modificação deve garantir que você obtenha números inteiros no intervalo desejado.

Relendo aqui de novo, eu entendi também, é que ficou meio ambiguo. Obrigada.

solução!

Não me atentei muito a este detalhe da explicação porque tinha entendido a ideia da função Math.random(). Inclusive indico a mesma coisa que eles indicaram: acesse o site da mozilla e veja todos os detalhes desta função, que ficará mais fácil. No site tem até uns exemplos bem interessantes.

Mas vamos lá.

A função Math.random() gera um número "aleatório" compreendido entre 0.000000000000 e 0.999999999999, isto é, 0 incluso, mas 1 não está incluso, e tem 12 casas decimais. Como estamos trabalhando com números inteiros de até 10, então multiplica o resultado pelo valor máximo que queremos chegar.

O problema é que, deste modo, os valores ficaram entre 0.000 e 9.999 (não vou colocar aquela quantidade toda, mas imagine que são 11 casas decimais agora, rs). Como pode ver, aparece o 0, que está fora do escopo, e não aparece o 10, que está dentro. Como queremos que comece do 1, fazemos a adição após a multiplicação. Com isso, o resultado fica entre 1.000 e 10.999. Daí tiramos somente o inteiro e... tcharam!!! Ficamos com resultado entre 1 e 10!!!

A mesma lógica segue para o 100. Após multiplicar Math.random() por 100, teremos um valor entre 0.00 e 99.99 (com 10 casas decimais). Soma 1 para ficar com 1.00 a 100.99 e por fim usar o parseInt para ter 1 a 100.

Qualquer dúvida a mais, se eu puder ajudar, fazer com toda a atenç

Excelente explicação, ajudou a elucidar ainda mais, obrigada a todos.

Para gerar um número entre 1 e 3, podemos usar o código: let numeroAleatorio1a3 = parseInt(Math.random() * 3) + 1;.

Então quando fala que é numero de 1 a 3, soma + 1, por que ficaria 2,99 + 1 = 3,99, mas como é numero inteiro só compreende 1 a 3?

Não sei se me expressei bem.