[RESOLVIDO] [AJUDA] Imprimir elemento do ArrayList com um determinado valor (P.O.O.)

2 respostas
N

Boas.

Estou a fazer um exercício sobre P.O.O. (programação orientada a objectos) onde tenho que gerar uma lista telefónica para pessoas e para empresas e guardar a mesma num ArrayList.
Depois tenho que fazer o output para o ecrã de:

o Todas as entradas da agenda.
o As entradas que tenham um dado número de fax. (aqui é que está o meu problema)

Eu fiz uma hierarquia de Classes onde a Classe Agenda é a SuperClasse de Pessoa e Empresa, e depois tenho a Main Classe TesteAgenda para fazer o programa rolar.

As pessoas caracterizam-se pelo nome, número de telefone e número de telemóvel e as empresas caracterizam-se pelo nome, número de telefone, endereço de e-mail e número de fax.

Deixo aqui em baixo o meu código, pensando eu que o meu erro está na condição do último if() dentro do ciclo for() da Main Classe TesteAgenda, pois eu não sei as condições para comparar comparar os valores de instâncias de Classes guardadas em ArrayLists.

Classe Agenda

public class Agenda {
    //campos
    private String nome;
    private String numTlf;

    //construtores
    public Agenda() {
        nome = "";
        numTlf = "";
    }

    public Agenda(String nome, String numTlf) {
        this.nome = nome;
        this.numTlf = numTlf;
    }

    //métodos Get
    public String getNome() {
        return nome;
    }

    public String getNumTlf() {
        return numTlf;
    }

    //métodos Set
    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setNumTlf(String numTlf) {
        this.numTlf = numTlf;
    }

    //métodos
    @Override
    public String toString() {
        if (getNumTlf().equalsIgnoreCase("")) {
            return String.format("Nome: %s%n", nome);
        } else {
            return String.format("Nome: %s%nNúmero de Telefone: %s%n", nome, numTlf);
        }
    }

    
}

Classe Pessoa

public class Pessoa extends Agenda {
    //campos
    private String numTlm;

    //construtores
    public Pessoa() {
        super();
        numTlm = "";
    }

    public Pessoa(String nome, String numTlf, String numTlm) {
        super(nome, numTlf);
        this.numTlm = numTlm;
    }

    //métodos Get
    public String getNumTlm() {
        return numTlm;
    }

    //métodos Set
    public void setNumTlm(String numTlm) {
        this.numTlm = numTlm;
    }

    //métodos
    @Override
    public String toString() {
        if (getNumTlm().equalsIgnoreCase("")) {
            return String.format(super.toString());
        } else {
            return String.format(super.toString()+"Número de telemóvel: %s%n",numTlm);
        }
    }
}

Classe Empresa

public class Empresa extends Agenda {
    //campos

    private String email;
    private String fax;

    //construtores
    public Empresa() {
        super();
        email = "";
        fax = "";
    }

    public Empresa(String nome, String numTlf, String email, String fax) {
        super(nome, numTlf);
        this.email = email;
        this.fax = fax;
    }

    //métodos Get
    public String getEmail() {
        return email;
    }

    public String getFax() {
        return fax;
    }

    //métodos Set
    public void setEmail(String email) {
        this.email = email;
    }

    public void setFax(String fax) {
        this.fax = fax;
    }

    //métodos
    @Override
    public String toString() {
        String txt = "";
        if (getEmail().equalsIgnoreCase("") && getFax().equalsIgnoreCase("")) {
            txt = super.toString();
        } else {
            txt = super.toString() + "e-mail: " + email + "\nFax: " + fax+"\n";
        }
        if (getEmail().equalsIgnoreCase("") && (!getFax().equalsIgnoreCase(""))) {
            txt = super.toString() + "Fax: " + fax+"\n";
        }
        if ((!getEmail().equalsIgnoreCase("")) && getFax().equalsIgnoreCase("")) {
            txt = super.toString() + "e-mail: " + email+"\n";
        }
        return txt;
    }
}

Main Classe TesteAgenda

import java.util.ArrayList;

public class TesteAgenda {

    public static void main(String[] args) {
        //instâncias da Classe Pessoa
        Pessoa p1 = new Pessoa("Paulo", "221456785", "945741258");
        Pessoa p2 = new Pessoa("João", "", "971254762");
        Pessoa p3 = new Pessoa("Tiago", "214529861", "");

        //instâncias da Classe Empresa
        Empresa e1 = new Empresa("ISEP", "220500400", "[email removido]", "220500401");
        Empresa e2 = new Empresa("FEUP", "220600800", "[email removido]", "");
        Empresa e3 = new Empresa("ISCAP", "220700900", "", "220700901");//é suposto este aparecer quando faço a busca por nº de fax
        Empresa e4 = new Empresa("PACSI", "220721956", "", "220700901");//é suposto este aparecer quando faço a busca por nº de fax

        //ArrayList que guarda os contactos
        ArrayList agenda = new ArrayList();

        //preenchimento do ArrayList
        agenda.add(p1);
        agenda.add(p2);
        agenda.add(p3);
        agenda.add(e1);
        agenda.add(e2);
        agenda.add(e3);
        agenda.add(e4);

        //todas as entradas da lista
        System.out.println("Todas as entradas da agenda: ");
        for (Object obj : agenda) {
            System.out.println(obj);
        }

        //entradas com um determinado nº de fax
        String fax="220700901";//nº de faz escolhido
        System.out.println("---------------------");
        System.out.println("\nEntradas com um determinado nº de fax");
        for (Object obj : agenda) {
            if(fax.equals(((Empresa)obj).getFax())){//penso que o erro está aqui
                System.out.println("Entrada encontrada:\n"+obj);
            }else{
                System.out.println("Entrada não encontrada");
            }
        }


    }
}

Se me puderem ajudar eu agradeço :wink:
Cumprimentos

2 Respostas

jorginhoskater

Acredito que isso irá solucionar o seu problema.

for (Object obj : agenda) 
        {
                 //é lançado uma ClassCastException
        	/*if(fax.equals(((Empresa)obj).getFax())){//penso que o erro está aqui
                System.out.println("Entrada encontrada:\n"+obj);
            }else{
                System.out.println("Entrada não encontrada");
            }
            */
                 //verifica se o objeto é uma instância da classe Empresa
        	if(obj instanceof Empresa)
        	{
                        //aqui é feito um cast
        		Empresa empresa = (Empresa)obj;
        		
                        //verifica se o fax é o procurado.
        		if(empresa.getFax().equals(fax))
        		{
        			System.out.println("nome: " + empresa.getNome() + "\nfax: " + empresa.getFax() );
        		}
        		else
        		{
        			System.out.println("entrada não encontrada.");
        		}
        	}
      }
N

Viva!

Obrigado jorginhoskater, era mesmo isso que eu estava necessitando…

Meu código ficou assim:

//entradas com um determinado nº de fax String fax = "220700901";//nº de faz escolhido System.out.println("---------------------"); System.out.println("\nEntradas com um determinado nº de fax"); for (Object obj : agenda) { if (obj instanceof Empresa) {//verifica se o objeto é uma instância da classe Empresa Empresa emp = (Empresa)obj;//aqui é feito um cast if (emp.getFax().equals(fax)) {//verifica se o fax é o procurado System.out.println("Entrada encontrada:\n" + obj); } else { System.out.println("Entrada não encontrada"); } } }

Muito Obrigado :smiley:
Cumprimentos

Criado 28 de março de 2011
Ultima resposta 28 de mar. de 2011
Respostas 2
Participantes 2