GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Oque há de errado neste método de remover no ArrayList?

java
poo
Tags: #<Tag:0x00007fbf1c095690> #<Tag:0x00007fbf1c0954d8>

#1

Meus amigos, boa noite. Vou resumir: Tenho um projeto de POO da faculdade e está tudo quase pronto, ele se resume em um sistema de criação de tickets(chamados) e no caso, existem 3 entidades: cliente, funcionario e administrador.
O funcionamento se da na seguinte maneira: cliente se cadastra, cria seu chamado e desloga. Funcionário loga, pode ver os chamados e pode fecha-los, que no caso seria o remove. Eu fiz um algoritmo, diz que o chamado foi removido no if que eu fiz mas ele continua lá, depois que eu saio da conta de funcionario e volto pra cliente. No caso depois de remover como funcionário e logar como cliente, nao deveria mostrar o chamado lá.

opção em que o funcionario escolhe para remover o chamado

if(opcao == 2){
                //apagar chamado por ID
                System.out.println("Digite o ID do chamado que você deseja apagar: ");
                int id = Integer.parseInt(sc.nextLine());
                if(id == chamado.getNumeroChamado()){
                    negocioChamado.removerChamado(chamado.getNumeroChamado());
                    System.out.println("Chamado apagado com sucesso!");
                }else{
                    throw new ChamadoNaoExistente("Número inserido inválido.");
                }

método de remover chamado:

public void removerChamado(int numeroChamado) throws ClassNotFoundException, IOException, ChamadoNaoExistente {
List chamados = dao.ler();
chamados.remove(buscarChamado(numeroChamado));
dao.escrever(chamados);
}

método de criação de chamado:

private void abrirChamado(Cliente cliente) {
    Chamado chamado = new Chamado();

    System.out.println("Entre com o título do Chamado:");
    // set Titulo
    chamado.setTitulo(sc.nextLine());

    int opc = 0;
    do {
        System.out.println("Entre com o setor do Chamado:");
        System.out.println("1 - Administração");
        System.out.println("2 - RH");
        System.out.println("3 - Diretoria");
        opc = Integer.parseInt(sc.nextLine());

        if (opc < 1 || opc > 3) {
            System.out.println("Valor aceitável: 1, 2 e 3");
        }
    } while (opc < 1 || opc > 3);
    // set Setor
    chamado.setSetor(((opc == 1) ? "Administração" : ((opc == 2) ? "RH" : "Diretoria")));

    opc = 0;
    do {
        System.out.println("Entre com a Categoria do Chamado:");
        System.out.println("1 - Hardware");
        System.out.println("2 - Software");
        System.out.println("3 - Rede");
        System.out.println("4 - Manutenção");
        System.out.println("5 - Backup");
        opc = Integer.parseInt(sc.nextLine());

        if (opc < 1 || opc > 5) {
            System.out.println("Valor aceitável: 1, 2, 3, 4 e 5");
        }
    } while (opc < 1 || opc > 5);

    String categoria = null;
    switch (opc) {
        case 1:
            categoria = "Hardware";
            break;
        case 2:
            categoria = "Software";
            break;
        case 3:
            categoria = "Rede";
            break;
        case 4:
            categoria = "Manutenção";
            break;
        case 5:
            categoria = "Backup";
            break;
    }

    //set Categoria
    chamado.setCategoria(categoria);

    System.out.println("Entre com a Descrição do Chamado: ");
    //set Descrição
    chamado.setDescricao(sc.nextLine());

    opc = 0;
    do {
        System.out.println("Qual a prioridade?\n1 - Alta\n2 - Média\n3 - Baixa\n");
        opc = Integer.parseInt(sc.nextLine());

        if (opc < 1 || opc > 3) {
            System.out.println("Valor aceitável: 1, 2 e 3");
        }
    } while (opc < 1 || opc > 3);
    //set Prioridade
    chamado.setPrioridade(opc);

    //setCliente
    chamado.setCliente(cliente);

    try {
        negocioChamado.adicionarChamado(chamado);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Oque há de errado?

Um abraço!


#2

O problema deve estar no dao ou no removerChamado.

Acredito que o dao.escrever não remove se não existir o item da lista, acho que vai acrescentar os itens da lista no banco. Verifique se não há dados duplicados.


#3

Realmente, não sei pq não pensei/testei. Estou ficando preguiçoso
O erro foi no método removerChamado
Antes estava:

chamados.remove(buscarChamado(numeroChamado));

Deixei como:

  chamados.remove(numeroChamado);

Um abraço, amigo!!