Generic vector with error

1

I'm completing this generic vector activity, however I'm having trouble returning the last and the first element of the list. and to remove the element.

public class Vetor<T>{

    T[] vetor;
    int qntElementos = 0;

    public Vetor(int tam) {
        vetor = (T[]) new Comparable[tam];          //Comparadando os elementos de um vetor generico         
    }

    public boolean vazio() {
        return Tamanho() == 0;
    }

    public void Adicionar(T elemento) {
        if (Tamanho() == vetor.length) {            // Verifica se o tamanho de elementos é igual ao tamanho do vetor
            redimensionar();
        }
        for (int i = 0; i < vetor.length; i++) {
            if (vetor[i] == null) {
                vetor[i] = (T) elemento;
                qntElementos++;
                break;
            }
        }
    }


    public boolean remover(int posicao) {
        if (!vazio() && posicao >= 0 && posicao < Tamanho()) {
            for (int i = posicao; i < qntElementos; i++) {
                vetor[i] = vetor[i + 1];
            }
            vetor[Tamanho()] = null;
            qntElementos--;
            return true;
        } else {
            return false;
        }
    }

    public int First(){
        if (vazio()) {
            throw new ArrayIndexOutOfBoundsException("Posição fora da faixa permitida");
        }
        return (int) vetor[0];
    }

    public int Last(){
        if (vazio()) {
            throw new ArrayIndexOutOfBoundsException("Posição fora da faiza permitida");
        }
        return (int) vetor[qntElementos - 1];
    }

    public T pegar(int posicao) {
        if (vazio() || posicao < 0 || posicao >= Tamanho()) {
            throw new ArrayIndexOutOfBoundsException("Posição fora da faixa permitida");
        }
        System.out.print("O valor esta na posiçao: " + vetor[posicao]);
        return vetor[posicao];
    }

    public int Tamanho() {
        System.out.print("A lista tem: " + qntElementos + " posições.");
        return qntElementos;
    }

    public void redimensionar() {
        T[] novoVetor = (T[]) new Object[vetor.length + 4]; // Aumenta o tamanho do vetor em +4
        if (vetor.length == Tamanho()) {
            for(int i = 0; i < vetor.length; i++) {
                novoVetor[i] = vetor[i];
            }
            vetor = novoVetor;
        }
    }

    public void print() {
        if(vetor[0] == null) {
            System.out.println("A lista esta vazia");
        }else {
            for (T elemento : vetor) {
                System.out.print("[ " + elemento + " ]");
            }
        }System.out.println("\n");
    }

public class Main {

    private static boolean pass;

    public static void printMenu(){

             System.out.println("------------MENU--------------:");
            System.out.println("1 - Retorna o tamanho da lista.");
            System.out.println("2 - Retornar uma referencia para o primeiro elemento da lista.");
            System.out.println("3 - Retornar uma referencia para o primeiro elemento da lista.");
            System.out.println("4 - Inserir um elemento no fim da lista");
            System.out.println("5 - Imprimir a lista.");
            System.out.println("6 - Buscar um numero dentro do Vetor.");
            System.out.println("7 - Remover um numero dentro do Vetor.");
            System.out.println("0 - Sair do programa.");         
    }

    public static void main(String[] args){

        Scanner in = new Scanner(System.in);
        boolean go = true;
        pass = true;
            do{
                try {
                     System.out.println("Digite o tamanho do array para FILA: ");
                     int tam = in.nextInt(); 
                     Vetor vet = new Vetor(tam);
                     pass = false;
                     int opcao = -1; 

                     do{          
                         printMenu();  
                         opcao = in.nextInt();

                         switch(opcao){                        
                             case 1:
                                 System.out.println("Retornando o tamanho da fila:");
                                 System.out.println (vet.Tamanho());
                                 break;
                             case 2:
                                 System.out.println("Retornando referencia para o primeiro elemento da fila:");
                                 System.out.println (vet.First());
                                 break;
                             case 3:
                                 System.out.println("Retornado referencia para o ultimo elemento da fila:");
                                 System.out.println (vet.Last());
                                 break;
                             case 4:
                                for (int i = 1; i <= tam; i++){
                                    System.out.print("Digite um valor para inserir na fila: \n");
                                    int valor = in.nextInt( );
                                    System.out.printf("Inserindo elemento, %s no fim da fila \n",valor);
                                    vet.Adicionar(valor);
                                }
                                 break;
                             case 5:
                                 System.out.println("Imprimindo a fila:");
                                 vet.print();
                                 break;
                             case 6:
                                 System.out.println("Retornado a busca do elemento: ");
                                 System.out.print("Digite um valor para buscar na lista: \n");
                                 int valor = in.nextInt( );
                                 System.out.print("O valor que está na posição " + valor + " é: ");
                                 System.out.println (vet.pegar(valor));
                                 break;
                             case 7:
                                 System.out.println("Removendo elementos da lista: ");
                                 System.out.println (vet.remover());
                                 break;
                             case 0:
                                 System.out.println("Finalizando o programa!");
                                 System.out.println("Confirma saida? S-sim outro-não");
                                 String confirm = in.next();
                                 if(confirm.equals("s") || confirm.equals("S")){
                                     System.out.println("Programa finalizado!");
                                     go = false;
                                 }
                                 break;
                             default:
                                 System.out.println("Valor invalido!");                        
                         }
                     }while(go);

                 }catch(InputMismatchException erro1){
                     pass = true;
                     System.out.println("O tipo de valor digitado e invalido : ");
                     in.nextLine(); // discards the entry invalidates and frees the Scanner function again
                 }catch(ArrayIndexOutOfBoundsException erro2){
                     pass = true;    
                     int teste = parseInt(erro2.getMessage());
                     if(teste == -1){
                         System.out.println("Underflow");
                     }else if(teste > -1){
                         System.out.println("Overflow"); // provisional treatment should be double the size of the array.
                     }                   

                 }catch(NegativeArraySizeException erro3){
                     System.out.println("Numero negativo invalido para o tamanho do array!");
                 } 
            }while(pass);
      }
    
asked by anonymous 06.05.2016 / 19:16

1 answer

2

I practically gave the class ready in the previous AP question . This time I will only make some considerations.

Some changes in the class made it worse.

Worst of all is the placement of println() within a class that should only have data and behaviors specific to that data. I had already taken this from some methods since it is somewhat spurious. Now it has again in some places harming the functioning of the class.

Some changes are inconsistent with the rest. As this is probably an exercise, if the teacher is smart he will clearly perceive that one part was made by one person and another part by another. Not only because one part the code is organized and another not, but also by the techniques used.

There are things I would do other than what I put there. Mainly seeing the way it is being used.

The Main class should probably be static.

I can not imagine why pass is a class variable and not the main() method itself. To tell you the truth I can not imagine why this variable exists. It's just making code complicated. Probably the same is true for go . Almost all flag variables in code represent errors.

    
07.05.2016 / 02:03