10
respostas

quem mais viu o erro no código da resposta correta escrevendo assim ele nao vai gerar um código entre 1 e 3 e sim entre 2 e 3

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

10 respostas

Olá, Joel!

A função Math.random() gera um número decimal aleatório entre 0 (inclusivo) e 1 (exclusivo). Quando queremos transformar esse número em um inteiro dentro de um intervalo, como de 1 a 3, precisamos ajustar a escala e arredondar o valor.

Para isso, é correto fazer o que a alternativa A diz:

"...usar o código: let numeroAleatorio1a3 = parseInt(Math.random() * 3) + 1;."

Nesse caso, Math.random() * 3 vai gerar um número decimal entre 0 e 2.999..., e a função parseInt() vai arredondar esse número para baixo, resultando em um inteiro de 0 a 2. Adicionando 1, ajustamos o intervalo para ser de 1 a 3.

Para confirmarmos isso, podemos verificar as possibilidades de retorno desse código:

  • 1. Se Math.random() retorna o menor valor possível, que é 0, será feito 0 * 3, que é 0. Somando 1, ao fim obtemos 1 (valor mínimo).

  • 2. Se Math.random() retorna o maior valor possível, que é um valor próximo de 1 (mas nunca 1), digamos 0.999..., será feito 0.999... * 3, que é aproximadamente 2.999.... A função parseInt(2.999...) arredondará esse valor para baixo, nos dando o valor 2. Somando 1, ao fim obtemos 3 (valor máximo).

Espero ter ajudado a esclarecer sua dúvida. Fico à disposição para ajudar caso tenha mais questões futuramente!

Até mais.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

não amigo você nao entendeu. não fiquei com nenhuma dúvida pois a função let numeroAleatorio1a3 = parseInt(Math.random() * 3) + 1; se você colocar o 1 fora do parentese o código vai gerar numeros aleatórios apartir do numero 2, nunca vai ser gerado o 1; mais se você colorar o código parseInt(Math.random() * 3 + 1), vai obter numeros aleatórios de 1 a 3. o erro está ai. pode testar!.

Olá, Joel!

Se entendi bem, você está dizendo que a função com o número "+ 1" fora dos parênteses não funciona corretamente, somente gerando números aleatórios entre 2 e 3, enquanto a função com "+ 1 dentro dos parênteses funciona corretamente, gerando números aleatórios entre 1 e 3. É isso?

A sua função está correta. No entanto, a do exercício também resulta em números aleatórios entre 1 e 3.

Vamos entender os dois códigos:

Código da alternativa:

let numeroAleatorio1a3 = parseInt(Math.random() * 3) + 1;
  • Math.random() * 3: Pega um número entre 0 e 2.999....
  • parseInt(...): Remove as casas decimais, ficando apenas com 0, 1 ou 2.
  • + 1: Adiciona 1 ao resultado final, que pode ser 1, 2 ou 3.
  • Resultado Final: Números aleatórios entre 1 e 3.

Sua sugestão:

let numeroAleatorio1a3 = parseInt(Math.random() * 3 + 1);
  • Math.random() * 3 + 1: Pega um número entre 1 e 3.999....
  • parseInt(...): Remove as casas decimais, ficando apenas com 1, 2 ou 3.
  • Resultado Final: Números aleatórios entre 1 e 3.

Espero ter ajudado! Fique à vontade para continuar utilizando o Fórum sempre que precisar.

Até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

OPA!. É ai que eu quero chegar, o primeiro código gera numeros de 0 a 3 e a questão pede numero de 1 a 3. então ele está certo por um lado mais errado por o outro na resposta

Fala, Joel!

No primeiro código, Math.random() * 3 pode gerar os valores 0, 1 ou 2. Após isso, é somado 1 ao valor resultante. Tendo isso, veja no que o código pode resultar:

  • (Math.random() * 3) = 0: Somando 1, o resultado é 1;

  • (Math.random() * 3) = 1: Somando 1, o resultado é 2;

  • (Math.random() * 3) = 2: Somando 1, o resultado é 3;

Ou seja, os resultados (após ser somado 1) podem ser 1, 2 ou 3.

Caso esse código realmente não esteja correto na sua visão, acredito que eu não esteja entendendo bem o seu ponto.

Lembre-se que o Fórum permanece sempre aberto às suas questões!

Abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Oi Nícolas, A questão então pelo oq vc explicou, independente de onde esteja o )

  1. let numeroAleatorio1a3 = parseInt(Math.random() * 3) + 1; ou
  2. let numeroAleatorio1a3 = parseInt(Math.random() * 3 + 1); Resulta o mesmo? A questão que deve está criando dúvidas é a posição do ) podendo interferir ou não, no resultado, entendeu? Obrigada

isso mesmo Patrícia, ótimo posicionamento. fiz uns testes e vi que o posicionamento do numero um dentro ou fora dos parênteses podem interferir no resultado contando apenas do 2 ao numero definido após o sinal de *, por exemplo: "parseInt(Math.random() * 4) + 1". Contando apenas; 2,3,4. E parseInt(Math.random() * 4+1) ". contando 1,2,3,4.

essa é a questão que estou tentando explicar ao Nícolas e ele nao compreendeu. Abraços a todos que interagiram com o pos.

Eu percebi também assim que finalizou a aula, achei estranho e respondi errado a questão pois não foi falado no vídeo que também poderia ser nesse modelo let numeroAleatorio1a3 = parseInt(Math.random() * 3) + 1;

Olá, pessoal! Tudo certo?

Que demais ver a interação de vocês! Fiquem sempre a vontade para expor suas dúvidas e posicionamentos!

Em relação a questão central do post, eu havia entendido que a dúvida é em relação a posição do parênteses de fechamento (")") mesmo. Como expliquei, não faz diferença, no caso do exercício que estamos o parênteses estar antes ou depois do "+ 1".

Como expliquei na minha segunda resposta, o que ocorre para cada fórmula é o seguinte:


Código da alternativa:

let numeroAleatorio1a3 = parseInt(Math.random() * 3) + 1;

*Com "+ 1" fora dos parênteses.

  • 1. É gerado um número aleatório entre 0 e 2,999... (com "Math.random() * 3"): Notem que aqui temos um número que está entre 0 e 2,999..., não um número entre 1 e 3, ou seja, não atingimos o objetivo da questão ainda.

  • 2. O número gerado é arredondado para baixo (com "parseInt(...)") Agora, removemos as casas decimais do número gerado (que pode ir de 0 até 2,999... por enquanto). Por exemplo, se for gerado o número 0,452..., teremos 0 como resultado, se for gerado o número 1,000293, teremos 1 como resultado e se for gerado, por exemplo, o número 2,81202... o resultado que teremos será 2. Com isso, os únicos resultados possíveis para esse código até agora são 0, 1 ou 2 (ainda não atingimos o objetivo).

  • 3. Adicionamos 1 ao resultado (com "+1"): No passo anterior, vimos que podemos ter 0, 1 ou 2 como resultado do código. Agora, iremos adicionar um ao resultado gerado, independente de ser 0, 1 ou 2, será adicionado 1 ao resultado. Imagine que o código gerou o número 0, com o "+ 1", teremos 1 como resultado. Caso o resultado gerado fosse 1, seria adicionado 1 a esse resultado, gerando então o número 2. Por fim, sendo o resultado 2, soma-se 1 e teríamos 3 como resultado.

  • Ou seja, os resultados possíveis passam a ser 1, 2 ou 3, sendo que, originalmente podem ser 0, 1 ou 2, mas adicionamos 1 e temos 1, 2 ou 3.


Código sugerido:

let numeroAleatorio1a3 = parseInt(Math.random() * 3 + 1);

*Com "+ 1" dentro dos parênteses.

  • 1. É gerado um número aleatório entre 1 e 3,999... (com "Math.random() * 3 + 1"): Notem que aqui temos um número que está entre 1 e 3,999..., não um número entre 1 e 3, ou seja, não atingimos o objetivo da questão ainda. Lembre-se que, no código anterior, nessa fase era gerado um valor entre 0 e 2,999.... Com o "+ 1" dentro dos parênteses, o número gerado aqui estará entre 1 e 3,999....

  • 2. O número gerado é arredondado para baixo (com "parseInt(...)") Agora, removemos as casas decimais do número gerado (que pode ir de 1 até 3,999... por enquanto). Por exemplo, se for gerado o número 1,452..., teremos 1 como resultado, se for gerado o número 2,000293, teremos 2 como resultado e se for gerado, por exemplo, o número 3,81202... o resultado que teremos será 3. Com isso, os únicos resultados possíveis para esse código até agora são 1, 2 ou 3 (que é o objetivo da questão.

  • Ou seja, os resultados possíveis nesse código são 1, 2 ou 3.


Com toda essa explicação, podemos concluir que os dois códigos estão corretos! Tendo o parênteses de fechamento antes ou depois do "+ 1", o que mude é apenas o momento onde será adicionado 1 ao número gerado. No primeiro código, será adicionado após termos o número 0, 1 ou 2 como resultado. No segundo código, é adicionado logo no início, gerando um número entre 1 e 3,999... e então arredondando esse resultado.

Não vejam um código como correto e outro como incorreto. Os vejam como diferentes!

A questão poderia ter qualquer um dos dois códigos na alternativa correta que ainda faria sentido.

Ainda com essa conclusão, muuito obrigado por deixarem aqui seus pontos e posicionamentos!

Sigo à disposição para ajudar quando precisarem! Até a próxima!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Perfeito!! Agora entendi!! Obrigada =)