Olá amigos. Estou treinando o que aprendi assistindo a algumas vídeo aulas e também em algum material que li, e gostaria que vocês me ajudassem com as críticas e opiniões quando ao meu código fonte. Está com alguns erros, mas meu objetivo ao postar aqui é realmente saber se a base está correta, o encapsulamento, se segue ou não as principais regras de orientação a objeto, se cometi algum erro absurdo. A ideia de criar os métodos no 'main' é para fazer a validação dos valores informados pelo usuário. Fique em dúvida se deveria fazer a validação no main ou na própria classe 'ListaDeCompras'. Copiando e colando o código. Apenas para lembrá-los: estou estudando há pouco tempo, estou acompanhando meu primeiro curso de Java, e minha bagagem em programação não tem mais do que algumas semanas. Desde já agradeço.identar texto pre-formatado em 4 espaços`
CLASSE ListaDeCompras:
package listaDeCompras;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
public class ListaDeCompras{
private LinkedList<String> linkedList = new LinkedList<String>();
//Método responsável por ordenar alfabeticamente os itens
public boolean addEmOrdem(String item){
ListIterator<String> li = linkedList.listIterator();
while(li.hasNext()){
int comparador = li.next().compareTo(item);
if(comparador == 0){
System.out.println(item + " ja cadastrado");
return false;
} else if(comparador > 0){
li.previous();
li.add(item);
System.out.println(item + " foi adicionado");
return true;
}
}
li.add(item);
System.out.println(item + " foi adicionado");
return true;
}
//Método responsável por remover item
public void removeItem(String item){
linkedList.remove(buscaItem(item));
System.out.println(item + " foi removido" + "\n");
}
//Método responsável por modificar item
//Substituindo antigo item pelo novo
public void modificaItem(String oldItem, String newItem){
int index = linkedList.indexOf(oldItem);
linkedList.set(index, newItem);
}
//Método responsável por imprimir a lista
public void printLista(){
Iterator i = linkedList.iterator();
int cont = 1;
System.out.println("Qtde de itens: " + linkedList.size());
while(i.hasNext()){
System.out.println(cont + ". " + i.next());
cont += 1;
}
}
//Método responsável por retornar Index do item - retorno usado no método 'modificaItem'
private int buscaItem(String item){
return linkedList.indexOf(item);
}
}
CLASSE Main:
package listaDeCompras;
import java.util.Scanner;
public class Main{
private static ListaDeCompras lista = new ListaDeCompras();
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
boolean exit = false;
while(!exit){
printOpcoes();
int opcao = scanner.nextInt();
scanner.nextLine();
switch (opcao){
case 1:
break;
case 2:
System.out.println("Informe item a ser adicionado: ");
adicionaItem(scanner.nextLine());
break;
case 3:
System.out.println("Informe item a ser removido: ");
removeItem(scanner.nextLine());
break;
case 4:
//Erro neste método IndexOutOfBoundsException
System.out.println("Informe item a ser modificado: ");
String velhoItem = scanner.nextLine();
System.out.println("Informe novo item: ");
String novoItem = scanner.nextLine();
modificaItem(velhoItem, novoItem);
break;
case 5:
printLista();
break;
case 6:
exit = true;
break;
}
}
}
//Dúvida se é melhor utilizar os métodos diretamente acessando-os pela lista
//Ou se criar métodos nesta classe e assim validar os valores passados pelo usuário
public static void printOpcoes(){
System.out.println("1. Mostrar opcoes");
System.out.println("2. Adicionar item");
System.out.println("3. Remover item");
System.out.println("4. Modificar item");
System.out.println("5. Mostrar lista");
System.out.println("6. Sair");
}
public static void adicionaItem(String novoItem){
lista.addEmOrdem(novoItem);
}
public static void removeItem(String item){
lista.removeItem(item);
}
public static void modificaItem(String velhoItem, String novoItem){
lista.modificaItem(novoItem, novoItem);
}
public static void printLista(){
lista.printLista();
}
}