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

[Dúvida] Controle de loop usando opção informada pelo usuário.

Oi, tudo bem?

Tentando exercitar o loop e também a manipulação da lista me deparei com uma dificuldade que não consegui entender.

Eu fiz um (do - while) para permitir excluir mais de um jogo da lista.

Na primeira execução, tudo corre normalmente, mas, quando solicita pela segunda vez, perguntando se o usuário deseja remover algum jogo, o sistema não aguarda que algo seja digitado, apenas avança e aplica uma String vazia na opção.

Veja o código da função que criei: trecho de código da função removerGameCom a variável opcão recebendo o valor de uma String vazia, a variável desejaRemover fica com valor false e a execução da função termina.

A seguir o conteúdo da função solicitarOpcao:

trecho de código da função solicitarOpcao

Como mencionado, na primeira vez em que a função é executada o jogo é removido normalmente.

2 respostas
solução!

Olá, tudo bem?

O problema que você está enfrentando é comum quando se utiliza o Scanner para ler entradas do usuário.

Quando você usa nextInt() para ler um número, ele não consome a quebra de linha (enter) que o usuário digita após o número. Assim, quando nextLine() é chamado na próxima iteração, ele lê essa quebra de linha residual, resultando em uma string vazia.

Para resolver isso, você pode adicionar uma chamada extra a nextLine() logo após nextInt(), para consumir a quebra de linha. Veja como ficaria:

fun removerGame(leitura: Scanner) {
    do {
        val opcao: String = solicitarOpcao(leitura, mensagem = "\nSe desejar remover algum jogo da lista digite 's':")
        val desejaRemover = opcao.equals(other = "s", ignoreCase = true)
        if (desejaRemover) {
            listarGames()
            print("Informe a posição do jogo que deseja excluir: ")
            val indice: Int = leitura.nextInt()
            leitura.nextLine() // Consome a quebra de linha residual
            if (indice >= 0 && indice < jogosBuscados.size && jogosBuscados.get(indice) != null) {
                jogosBuscados.removeAt(indice)
            } else {
                println("Posição inválida!")
            }
        }
    } while (desejaRemover)
}

Com essa modificação, o loop deve funcionar conforme esperado, aguardando a entrada correta do usuário a cada iteração.

Espero ter ajudado e bons estudos!

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

Muito obrigado Armando.

O problema era exatamente esse.

Se posso deixar uma sugestão, seria interessante incluir uma observação a esse respeito quando o curso apresentar o scanner.

Muito obrigado mesmo.