2
respostas

[Dúvida] E se o usuário digitar um número negativo ou um número float, o que eu devo fazer?

//4 Crie um programa de contagem progressiva. Peça um número e conte de 0 até esse número, usando um loop while no console do navegador

// Vamos fazer uma contagem progressiva de 0 até número que você digitar. Use um número inteiro positivo!');
let numeroDigitado = parseInt(prompt('Digite o seu número (precisa ser um número positivo):'));
console.log(Numero digitado pelo usuário: ${numeroDigitado} - app.js:4);

if (numeroDigitado > 0) {
let contador = 0;
console.log(Iniciando contagem a partir de: ${contador} - app.js:8);
alert(Contagem iniciada! ${contador});
while (contador < numeroDigitado) {
contador++;
alert (Contando até o número digitado: ${contador});
console.log (Contador até o número digitado: ${contador} - app.js:13);
}
} else {
alert('Tente novamente com um número inteiro positivo!');
}

2 respostas

Boa tarde.

Quanto se o usuário não escrever um número inteiro, o programador poderia ter duas soluções. Ou aproveita aornas a parte inteira do número informado, como você fez no código acima, ou, verifica se o número informado é inteiro:

if (Number.isInteger(numero)) 

if (Number.isInteger(numero))

Boa noite, @Danielli Meilene Coutinho Arçari

Referente a sua dúvida ("E se o usuário digitar um número negativo ou um número float, o que eu devo fazer?"), essa é uma questão que é dividida em duas partes (a ordem que vou apresenta-las não é importante).

a) Se o usuário digitar um número negativo;
b) Se o usuário digitar um número float;
c) (BÔNUS) Se o usuário não digitar nada (ou apertar cancelar no prompt);
.
OBS: Vou incluir minha solução após as explicações.
.
a) Para evitar que o usuário digite um número negativo, podemos adicionar uma estrutura condicional que verifica se o valor inserido é menor que zero (ou maior que 0 - como você já fez). Caso seja, podemos exibir uma mensagem de erro ou solicitar uma nova entrada.

b) Para solucionar esse outro problema, podemos utilizar do parseInt(string) (MDN). A função parseInt() converte o valor passado como parâmetro (dentro dos parêntesis) para um número inteiro. Se for passado um número decimal (float), ele será convertido descartando as casas decimais, ou seja, será arredondado para baixo até o número inteiro mais próximo.

c) (BÔNUS) Para solucionar esse terceiro problema, podemos fazer duas verificações. A primeira será fazendo uma comparação do que foi digitado com uma string "vazia" ("") {valorDigitado !== ""}, caso o usuário não digite nada e aperte "ok" no prompt. E a segunda seria fazendo uma comparação com null {valorDigitado !== null} (null é diferente de ""), que ocorre quando o usuário aperta em "cancelar" no prompt (e ai sua variável não seria "preenchida"/inicializada).

Minha solução:

//4) Crie um programa de contagem progressiva. Peça um número e conte de 0 até esse número,
//   usando um loop while no console do navegador

let contador = 0;
let numeroInformado = prompt('Por favor, informe um número inteiro maior que 0: ');
//console.log(numeroInformado);

/* Verifica se o que foi digitado não é null
   e também se não é "vazio" ("") */
if (numeroInformado == null || numeroInformado == "") {
  
  console.log('Informe algum valor');
  
} else {
  
  // Verifica se o valor informado não é menor ou igual a zero
  if (numeroInformado <= 0)
  {
    console.log("Informe um número maior que zero")   
    
  } else {
    
    /* Enquanto (while) o contador (que começou em 0) for menor ou igual 
       ao valor informado (convertido em inteiro) o código dentro do while vai
         continuar a ser executado*/
    while (contador <= parseInt(numeroInformado)) {
        
        console.log(contador);
        contador++;
    }
  } // fim if negativo
} // fim if null ou "vazio"