Olá desenvolvedores, já aprendemos a remover itens da lista. Hoje, ainda no contexto de listas, aprenderemos a remover quantos itens forem necessários ou desejarmos. E claro, de forma dinâmica, buscando sempre um código otimizado e performático. Além de promover uma maior interação com o usuário. Deixando-o o máximo possível no controle.
O nosso objetivo no tutorial de hoje é permitir que o usuário remova tantas disciplinas quanto desejar. Assim sendo, a lógica é, enquanto o usuário desejar poderá seguir removendo as disciplinas da lista. Isto é, até que não tenha mais disciplinas para serem removidas.
Para que possamos dar ao usuário esta possibilidade de remover quantas disciplinas desejar, vamos utilizar a estrutura de repetição while. Recordando que esta estrutura de repetição processa uma instrução ou grupo de instruções, zero ou mais vezes. Ou seja, a instrução será processada enquanto a condição de continuação do loop permanecer verdadeira.
LISTA: IMPLEMENTANDO O CÓDIGO
O primeiro passo é criar uma variável. lembrando sempre, todas as ações de execução acontecem na classe principal. Então, na classe main, dentro da estrutura de decisão if, vamos criar uma variável que será inicializada com o valor zero. E por que zero? Porque iremos utilizar o showConfirmDialog e a opção “sim” para remover a disciplina é igual zero.
int continuarRemover = 0;
Para perguntar ao usuário se ele deseja remover uma disciplina, utilizamos o recurso showConfirmDialog da classe JOptionPane. Este recurso dá ao usuário as escolhas do tipo: sim (Yes) = 0, não (No) = 1 e cancelar (Cancel) = -1. Se você não se lembra, pode conferir uma explicação detalhada clicando aqui.
Ao inicializarmos a variável “continuarRemover” com o valor zero, que corresponde ao sim, o que estamos fazendo? Estamos garantindo a execução do while, quando a opção escolhida pelo usuário o levar a executar o que está dentro do if. Resumindo, agora todo o bloco de instrução que estava dentro do if e que era executado uma única vez, será executado enquanto a condição continuar sendo true. Ou seja, enquanto “continuarRemover” for igual a zero.
Vamos ver na prática como isso funciona.
Enfim, todo o bloco de instrução que estava dentro do if, será agora, envolvido pelo while, que está dentro do if. E dentro do while, vamos novamente utilizar o showConfirmDialog para perguntar ao usuário se ele deseja continuar removendo as disciplinas.
continuarRemover = JOptionPane.showConfirmDialog(null, "CONTINUAR A REMOVER?”);
CONDIÇÃO DE INTERRUPÇÃO DO LOOP
Se o usuário responder que sim, que deseja continuar removendo as disciplinas, a variável “continuarRemover” receberá zero. Isso significa que voltaremos ao início do while e todo o processo se repetirá. Quando ele disser que não, a variável receberá o valor 1, que neste caso é a condição para sair da estrutura de repetição.
Aliás, já falamos sobre isso, mas não custa repetir. “É importante que em algum momento da iteração, a estrutura de repetição encontre um valor de condição que seja falso. Para que desse modo o processamento possa ser interrompido, caso contrário pode acontecer de que seu sistema permaneça em um loop infinito”.
Entretanto, estabelecemos para a nossa lista um limite de quatro itens. Assim, se depois de removermos o primeiro item, indicarmos que desejamos remover o quarto item, um erro será exibido. Veja abaixo um exemplo do erro que poderá ocorrer.
SOLUCIONADO O ERRO
Solucionaremos este erro criando mais uma variável. Tal variável será inicializada com o valor 1. Assim, substituiremos o (1) – que era um valor fixo, pela variável “posicao”. O que vai acontecer? A cada item da lista que for removido a variável “posicao” será incrementada a seguir.
Ora, se ela foi inicializada com o valor 1, então após o incremento seu valor será 2. Dessa forma, agora subtrairemos a posição do index por 2, e assim sucessivamente.
Em síntese, quando removemos um item da lista, nós a deixamos com três elementos. Isso implica dizer que o index que antes era assim [0 1 2 3] = 4 elementos, agora está assim [0 1 2] = 3 elementos. Mas nós informávamos para o usuário que ele poderia remover itens na posição [1 2 3 4].
No entanto, isso foi possível porque encontramos um meio de traduzir para o sistema a opção escolhida pelo usuário. Fizemos isso subtraindo a posição escolhida pelo usuário por 1. Assim, adequávamos a escolha do usuário a posição correta no index. Mas dava certo porque só removíamos uma disciplina a cada execução do algoritmo.
Mas agora que demos ao usuário a possibilidade de remover mais de uma disciplina a cada execução do algoritmo, precisamos que a solução seja igualmente dinâmica. Daí a substituição do 1 por uma variável que será incrementada a cada iteração do sistema. Veja agora como ficou a implementação do while.
EM POUCAS PALAVRAS
O que fizemos hoje foi mais do que apenas implementar um meio de removermos mais de uma disciplina a cada iteração do algoritmo. Mas foi principalmente um exercício de lógica. E é por isso que insisto para que você pratique incansavelmente a lógica de programação.
Só com estudo e prática constantes é que você será capaz de resolver questões como a que foi mostrada neste tutorial, e outras até mais complexas sem perder incontáveis noites de sono.
Sugiro que você comece a praticar agora. Crie uma situação e implemente seu próprio sistema a parte do que estamos fazendo, seja nas aulas do Formação Java Web, seja seguindo os nossos tutoriais. E se você ainda não é nosso aluno, mas quer aprender mais sobre lógica de programa em Java, venha se juntar a nós. Temos algumas aulas grátis para que você possa conhecer o nosso método.