Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Existe a possibilidade de usar um "for" em vez do while? E como eu trabalharia com o i++ nesse caso?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Guessing More Game</title>
</head>
<body>
    <input type="text" name=""/>
    <button>Verify</button>

    <script>
        //You can define drawn numbers until 10.
        var secrets = drawNumbers(8);
        console.log(secrets);
        var input = document.querySelector("input");
        var button = document.querySelector("button");
        input.focus();



        function drawNumbers(quantity) {
            var numbers = [];
            var position = 0;

            while (position < quantity) {                                

                var randomNumberReturned = randomNumber();

                if (randomNumberReturned != 0) {
                    var numberFound = false;
                    for (var j = 0; j < numbers.length; j++) {                        

                        if(randomNumberReturned == numbers[j]){
                            numberFound = true;
                            break;
                        }
                    }

                    if (numberFound == false) {                        
                        numbers.push(randomNumberReturned);
                        position++;
                    }

                }

            }

            return numbers;
        }

        function randomNumber(){
            return Math.round(Math.random() * 10);
        }

        function verify() {

            var secretFound = false;
            for(var i = 0; i < secrets.length; i++){

                if (input.value == secrets[i]) {
                    secretFound = true;
                    alert("You are right!");
                }
            }

            if (secretFound == false) {

                alert("You are wrong!");
            }

            input.value = "";
            input.focus();
        }


        button.onclick = verify;
    </script>
</body>
</html>
1 resposta
solução!

Olá Alex,

É possível alterar o while para um for, no entanto ao fazer isto o position++ sempre será chamado para cada etapa do loop, fazendo com que números sorteados 0 (zero) ou repetidos também sejam contados e ao final o array poderá ter menos do que os 8 números desejados.

Para obter o mesmo comportamento do while, neste caso, é necessário incluir else para os if que testam o 0 (zero) e os números repetidos, fazendo que o position seja decrementado:

        function drawNumbers(quantity) {
            var numbers = [];

            for (var position = 0; position < quantity; position++) {                                

                var randomNumberReturned = randomNumber();

                if (randomNumberReturned != 0) {
                    var numberFound = false;
                    for (var j = 0; j < numbers.length; j++) {                        

                        if(randomNumberReturned == numbers[j]){
                            numberFound = true;
                            break;
                        }
                    }

                    if (numberFound == false) {                        
                        numbers.push(randomNumberReturned);
                    } else {
                        position--;
                    }
                } else {
                    position--;
                }

            }

Desta forma, o array sempre terá 8 números sorteados (diferentes de zero e não repetidos). De qualquer forma, na minha opinião, seria melhor utilizar o while neste caso.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software