Análise de código

0 respostas
java
Nava_Junior

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();
    }
}
Criado 5 de março de 2016
Respostas 0
Participantes 1