Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvida no Ex. 1 da Aula 7 - Desafio final

Este é o meu programa do desafio final. Ele mostra os arrays de números sorteados e números chutados pelo usuário no console. Apesar de não ser cobrado no enunciado, eu tentei colocar uma verificação para que não sejam sorteados números repetidos, e nem o usuário possa escolher novamente números repetidos. Tentei de várias maneiras e não consegui. Alguém consegue me mostrar como consigo fazer isso?

<meta charset="UTF-8">
<script>

var numerosSorteados = [];
var numerosChutados = [];

Math.round(Math.random()*60);

for(var i = 0; i < 6; i ++){
     numerosSorteados[i] = Math.round(Math.random()*60);
}

for (var j = 0; j < 6; j++){
    numerosChutados[j] = parseInt(prompt("Digite o número " + (j+1)));    
}

var acertos = 0;
for (var k = 0; k < numerosChutados.length; k++){
    for (var l = 0; l < numerosSorteados.length; l++){
        if (numerosChutados[k] == numerosSorteados[l]){
            acertos = acertos + 1;
        }

    }
}

console.log(numerosSorteados);
console.log(numerosChutados);
document.write("Você acertou " + acertos);

</script>
4 respostas

Esta resposta era um complemento à pergunta. Seu conteúdo foi movido para a pergunta.

solução

Felipe, há algumas maneiras de fazer o que você quer. Vou mostrar uma que parece mais fácil de explicar.

Para gerar os números sorteados sem repetição, você precisa conferir se o número que você acabou de sortear já existe na lista de sorteados. Para isso, é melhor usar um while:

// enquanto a lista de sorteados não tiver 6 números
while (numerosSorteados.length < 6) {
    // sorteie um novo número
    var novoSorteado = Math.round(Math.random()*60);
    // caso o novo número ainda não esteja na lista
    // o método .includes() confere se na sua lista já existe o elemento entre parenteses. também pode ser feito iterando pela lista, como você fez no final do seu código
    if (numerosSorteados.includes(novoSorteado) == false) {
        // adicione o novo número na lista. mas em que indice?
        // o .length da lista vazia é 0 -> adiciona no indice 0
        // a lista já tem um elemento -> .length = 1 -> adiciona no indice 1
        // e por aí vai
        numerosSorteados[numerosSorteados.length] = novoSorteado;
    }
}

Para fazer o mesmo com os números chutados, será um processo semelhante:

// enquanto a lista de chutados não tiver 6 números
while (numerosChutados.length < 6) {
    // leia um novo número
    var novoChutado = parseInt(prompt("Digite o " + (numerosChutados.length+1) +"o número."));
    // caso o novo número ainda não esteja na lista
    if (numerosChutados.includes(novoChutado) == false) {
        // adicione o novo número na lista
        numerosChutados[numerosChutados.length] = novoChutado;
    }
    else {
        // caso o número já esteja na lista, avise o usuário
        alert("Você já chutou esse número. Escolha outro. Números já chutados: "+numerosChutados);
    }
}

Deu pra entender? Qualquer coisa, só chamar de novo!

Ps. 1: Se o usuário aperta Ok no prompt sem preencher nada (ou preenchendo com texto), ele insere um número inválido na lista de chutes. Pode ser legal conferir isso antes de adicionar.

Ps. 2: Estou editando sua pergunta para incluir o código. Da próxima vez faça isso ao invés de adicionar o complemento como uma resposta. ;)

Desculpe por ter colocado o complemento à pergunta na resposta. Foi meu primeiro post e não reparei que o código deveria ficar entre ''' ...''', logo ele não apareceu quando eu postei.

Deu para entender perfeitamente. Obrigado pela ajuda!

Marque a resposta como solução estão para que outros alunos com dúvidas semelhantes possam ser ajudados também ;) e bons estudos!