Autor Tema: java ArrayList clase madre cómo comparar objetos si son de subclases  (Leído 17568 veces)

ledesma90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 42
    • Ver Perfil
Muy buenas noches a todos los usuario de este foro y mis respetos, soy nuevo, y tengo una tremenda duda en un programa que no puedo resolver,mi problema es una comparación de objetos

MI PROBLEMA(abajo)
como puedo comparar objetos que están guardados en un ArrayList<clasemadre>, pero los objetos guardados son instancias de las subclases de <clasemadre>, osea los objetos no son todos iguales ya que tiene diferentes atributos y métodos, yo pienso que se pueden comparar los atributos y métodos similares, pero quisiera saber si se pueden comparar atributos y métodos diferentes, ya que existe la posibilidad de que haya otro objeto similar.
muchas gracias espero me puedan ayudar.saludos
« Última modificación: 20 de Septiembre 2014, 18:11 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2052
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #1 en: 15 de Mayo 2013, 08:20 »
Hola, las comparaciones se hacen normalmente entre atributos ¿A qué te refieres con comparar métodos? Para comparar atributos se dispone de herramientas como ==, interface Comparable y método compareTo, método equals, etc. y esto permite hacer comparaciones de todo tipo, también entre objetos de superclases y de subclases o de clases madre y clases hijas. La cuestión es ¿qué es exactamente lo que quieres hacer y lo que quieres comparar? Es conveniente que facilites el código, para ello usa el icono # que aparece en el editor del foro. También es conveniente que pongas un ejemplo con datos, y digas cuáles son los datos de partida y cuáles los resultados esperados. La respuesta al problema es "sí", se pueden comparar objetos guardados en un ArrayList que sean instancias de subclases, pero para concretar cómo habría que mirar el caso concreto.

Código: [Seleccionar]
Ejemplo para código:
esto está entre las etiquetas code
y se visualiza como código


ledesma90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 42
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #2 en: 15 de Mayo 2013, 21:32 »
Código: [Seleccionar]
public class Perfil {
    private boolean carnetDeConducir;
   
    public Perfil(boolean carnetDeConducir)
    {
    this.carnetDeConducir=carnetDeConducir;
    }
    public String getconducir()
    {
        String s;
        if(carnetDeConducir==true)
        {
        s="con carnet de conducir";
        }
        else
        {
        s="sin carnet de conducir";
        }
        return s;
    }
   
    //borrar si no funciona
    public boolean getcarnet()
    {
    return carnetDeConducir;
    }//borrar si no funciona
    public String ToString()
    {
    String salida="";
    salida="\n"+getconducir();
    return salida;
    }
}
-------------------------------------------------------------------------------------

public class PerfilEspecialista extends Perfil{
    private String especialidad;
    public PerfilEspecialista(boolean carnetDeConducir,String especialidad)
    {
    super(carnetDeConducir);
    this.especialidad=especialidad;
    }
    public String getespecialidad()
    {
    return especialidad;
    }
    public String toString()
    {
    String salida="";
    salida=""+getconducir()+
            "\nEl presente cuenta con la especialidad: "+especialidad;
    return salida;
    }
}
-------------------------------------------------------------------------------------

public class PerfilTitulado extends Perfil {
    private String titulo;
    private boolean conocimientoInformatica;
    public PerfilTitulado(boolean carnetDeConducir,String titulo,boolean conocimiento)
    {
    super(carnetDeConducir);
    this.titulo=titulo;
    conocimientoInformatica=conocimiento;
    }
    public String gettitulo()
    {
    return titulo;
    }
    public String getconocimiento()
    {
        String s;
        if(conocimientoInformatica==true)
        {
        s="El presente cuenta con conocimientos de informatica";
        }
        else
        {
        s="El presente no cuenta con conocimientos de informatica";
        }
        return s;
    }
    public String toString()
    {
    String salida="";
    salida="\n"+super.getconducir()+
            "\ntitulo: "+titulo+
            "\n"+getconocimiento();
    return salida;
    }
}
---------------------------------------------------------------------------------------

import java.util.*;
public class Empleo {
    public Perfil perfil;
   
    //ArrayList<PerfilEspecialista> perfil = new ArrayList<PerfilEspecialista>();
    //ArrayList<PerfilTitulado> perfil1 = new ArrayList<PerfilTitulado>();
    public Empleo(Perfil perfil)
    {
        this.perfil=perfil;
    }
    /*public void agregarobjeto (boolean carnetDeConducir,String especialidad){
        perfil.add(new PerfilEspecialista(carnetDeConducir,especialidad));
    }
    public void agregarobjeto (boolean carnetDeConducir,String titulo,boolean conocimiento){
        perfil1.add(new PerfilTitulado(carnetDeConducir,titulo,conocimiento));
    }*/
    public String toString()
    {
    String salida="";
    return salida;
    }
}
----------------------------------------------------------------------------------------

public class OfertaEmpleo extends Empleo {
    private String nombreEmpresa;
    private String puesto;
    private double sueldo;
    public OfertaEmpleo(Perfil perfil,String nombreEmpresa, String puesto,double sueldo)
    {
        super(perfil);
    this.nombreEmpresa=nombreEmpresa;
    this.puesto=puesto;
    this.sueldo=sueldo;
    }
    public String toString()
    {
    String salida="";
    salida = "\n"+perfil.toString()+
             "\nNombre de la empresa: "+nombreEmpresa+
             "\nPuesto a disposicion: "+puesto+
             "\nSueldo a cobrar: "+sueldo;
    return salida;
    }
}
------------------------------------------------------------------------------------------

public class DemandaEmpleo extends Empleo {
    private String persona;
    public DemandaEmpleo(Perfil perfil,String persona)
    {
        super(perfil);
    this.persona=persona;
    }
    public String toString()
    {
    String salida="";
    salida="\n"+perfil.toString()+
            "\nNombre del candidato: "+persona;
    return salida;
    }
}
-------------------------------------------------------------------------------------------

import java.util.*;
public class Colocacion {
    ArrayList<Empleo> empleo;
    public Colocacion()       
    {
        empleo=new ArrayList<Empleo>();
    }
    public void agregarobjeto (Perfil perfil,String nombreEmpresa, String puesto,double sueldo)
    {       
        empleo.add(new OfertaEmpleo(perfil,nombreEmpresa,puesto,sueldo));
    }
    public void agregarobjeto (Perfil perfil,String persona)
    {
        empleo.add(new DemandaEmpleo(perfil,persona));
    }
    public String toString()
    {
    String salida="";
    salida="\n"+empleo+"\n";
    return salida;
    }
}

------------------------------------------------------------------------------------------
public class test {
    public static void main (String [] args)
    {
        Colocacion emp=new Colocacion();
       
       
        PerfilEspecialista emp1= new PerfilEspecialista(true,"sumar");
        PerfilTitulado emp2= new PerfilTitulado(false,"analisis",true);
       
        emp.agregarobjeto(emp1,"empritotal", "gerente",15000);
        emp.agregarobjeto(emp2,"empritotal", "gerente",15000);
       
        PerfilEspecialista demp1= new PerfilEspecialista(true,"sumar");
        PerfilTitulado demp2= new PerfilTitulado(false,"analisis",true);
       
        emp.agregarobjeto(demp1,"jose");
        emp.agregarobjeto(demp2,"jose");
       
        System.out.println(emp);
    }
}
-------------------------------------------------------------------------------------------
                                        resultado del codigo

[

con carnet de conducir
El presente cuenta con la especialidad: sumar
Nombre de la empresa: empritotal                         //combinacion entre PerfilEspecialista y OfertaEmpleo
Puesto a disposicion: gerente
Sueldo a cobrar: 15000.0,

sin carnet de conducir
titulo: analisis
El presente cuenta con conocimientos de informatica
Nombre de la empresa: empritotal                        //combinacion entre PerfilTitulado y OfertaEmpleo
Puesto a disposicion: gerente
Sueldo a cobrar: 15000.0,

con carnet de conducir
El presente cuenta con la especialidad: sumar           //combinacion entre PerfilEspecialista y DemandaEmpleo
Nombre del candidato: jose,

sin carnet de conducir
titulo: analisis
El presente cuenta con conocimientos de informatica    //combinacion entre PerfilTitulado y DemandaEmpleo
Nombre del candidato: jose]

ledesma90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 42
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #3 en: 15 de Mayo 2013, 21:36 »
muchas gracias por responder Alex, ese es mi codigo y mi problema es:
                 
                  Clase Colocacion
La clase Colocacion tendrá como único atributo un ArrayList de tipo Empleo.  Esta clase deberá implementar:
•   El constructor por defecto que creará el arraylist.
•   Un método agregarEmpleo que agregará un nuevo tipo de empleo (OfertaEmpleo o DemandaEmpleo) dentro del ArrayList

•   Un método hayTrabajo(perfil) que reciba un perfil y determine si ese perfil tiene un par OfertaEmpleo – DemandaEmpleo y devuelve un valor booleano(true o false).
•   Un método hayParesOfertaDemandaEmpleo() que devuelva en otro ArrayList los pares oferta y demanda empleo para los perfiles o null si no existe ningún par.
•   El metodo toString para la clase


no entiendo como hacer lo subrayado, espero me puedan ayudar gracias..... 
saludos Alex

ledesma90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 42
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #4 en: 15 de Mayo 2013, 21:56 »
me voy a explicar mejor, para no complicar las cosas.
este programa tiene que consistir en buscar pares de personas que necesitan el empleo y ofertas de empleo de las empresas

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2052
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #5 en: 16 de Mayo 2013, 00:16 »
Te pongo más abajo el código con los siguientes cambios:

Clase Colocacion: añadido el método hayTrabajo

Clase Perfil: añadido el método equals

Clase PerfilEspecialista: añadido el método equals

Clase PerfilTitulado: añadido el método equals

Clase Empleo: el atributo perfil se declara como protected en vez de como public. Añadido el método getPerfil

Por cierto que hay una cosa que no entiendo ¿qué diferencia hay entre Empleo y Perfil, porque si Empleo lo único que tiene es un atributo Perfil es lo mismo no?

Clase test: añadidas algunas líneas para hacer el test del método hayTrabajo

Lo que dices: "Un método hayParesOfertaDemandaEmpleo() que devuelva en otro ArrayList los pares oferta y demanda empleo para los perfiles o null si no existe ningún par." no entiendo bien qué es lo que se quiere hacer.


Código: [Seleccionar]
public class Perfil {
    private boolean carnetDeConducir;

    public Perfil(boolean carnetDeConducir)
    {
        this.carnetDeConducir=carnetDeConducir;
    }

    public String getconducir()
    {
        String s;
        if(carnetDeConducir==true)
        {
            s="con carnet de conducir";
        }
        else
        {
            s="sin carnet de conducir";
        }
        return s;
    }

    //borrar si no funciona
    public boolean getcarnet()
    {
        return carnetDeConducir;
    }//borrar si no funciona
    public String ToString()
    {
        String salida="";
        salida="\n"+getconducir();
        return salida;
    }

    // Código que añadimos

    public boolean equals (Object obj) {

        if (obj instanceof Perfil) {

            Perfil tmpPerfil = (Perfil) obj;

            if (this.carnetDeConducir==tmpPerfil.carnetDeConducir) {return true; } else { return false; }

        } else { return false; }
    } //Cierre del método equals

}
-------------------------------------------------------------------------------------

public class PerfilEspecialista extends Perfil{
    private String especialidad;
    public PerfilEspecialista(boolean carnetDeConducir,String especialidad)
    {
    super(carnetDeConducir);
    this.especialidad=especialidad;
    }
    public String getespecialidad()
    {
    return especialidad;
    }
    public String toString()
    {
    String salida="";
    salida=""+getconducir()+
            "\nEl presente cuenta con la especialidad: "+especialidad;
    return salida;
    }
   
    // Código que añadimos

public boolean equals (Object obj) {

        if (obj instanceof PerfilEspecialista) {

            PerfilEspecialista tmpPerfilEspecialista = (PerfilEspecialista) obj;

            if (super.equals(tmpPerfilEspecialista) && this.especialidad.equals(tmpPerfilEspecialista.especialidad) ) {

                return true; } else { return false; }

        }  else { return false; }
    } // Cierre del método equals
   
}
-------------------------------------------------------------------------------------

ppublic class PerfilTitulado extends Perfil {
    private String titulo;
    private boolean conocimientoInformatica;
    public PerfilTitulado(boolean carnetDeConducir,String titulo,boolean conocimiento)
    {
    super(carnetDeConducir);
    this.titulo=titulo;
    conocimientoInformatica=conocimiento;
    }
    public String gettitulo()
    {
    return titulo;
    }
    public String getconocimiento()
    {
        String s;
        if(conocimientoInformatica==true)
        {
        s="El presente cuenta con conocimientos de informatica";
        }
        else
        {
        s="El presente no cuenta con conocimientos de informatica";
        }
        return s;
    }
    public String toString()
    {
    String salida="";
    salida="\n"+super.getconducir()+
            "\ntitulo: "+titulo+
            "\n"+getconocimiento();
    return salida;
    }
   
    public boolean equals (Object obj) {

        if (obj instanceof PerfilTitulado) {

            PerfilTitulado tmpPerfilTitulado = (PerfilTitulado) obj;

            if (super.equals(tmpPerfilTitulado) && this.titulo.equals(tmpPerfilTitulado.titulo) &&
            this.conocimientoInformatica == tmpPerfilTitulado.conocimientoInformatica ) {

                return true; } else { return false; }

        }  else { return false; }
    } // Cierre del método equals
   
}
---------------------------------------------------------------------------------------

import java.util.*;
public class Empleo {
    protected Perfil perfil;
   
    //ArrayList<PerfilEspecialista> perfil = new ArrayList<PerfilEspecialista>();
    //ArrayList<PerfilTitulado> perfil1 = new ArrayList<PerfilTitulado>();
    public Empleo(Perfil perfil)
    {
        this.perfil=perfil;
    }
    /*public void agregarobjeto (boolean carnetDeConducir,String especialidad){
        perfil.add(new PerfilEspecialista(carnetDeConducir,especialidad));
    }
    public void agregarobjeto (boolean carnetDeConducir,String titulo,boolean conocimiento){
        perfil1.add(new PerfilTitulado(carnetDeConducir,titulo,conocimiento));
    }*/
    public String toString()
    {
    String salida="";
    return salida;
    }
   
    public Perfil getPerfil() { return perfil;}
}
----------------------------------------------------------------------------------------

public class OfertaEmpleo extends Empleo {
    private String nombreEmpresa;
    private String puesto;
    private double sueldo;
    public OfertaEmpleo(Perfil perfil,String nombreEmpresa, String puesto,double sueldo)
    {
        super(perfil);
    this.nombreEmpresa=nombreEmpresa;
    this.puesto=puesto;
    this.sueldo=sueldo;
    }
    public String toString()
    {
    String salida="";
    salida = "\n"+perfil.toString()+
             "\nNombre de la empresa: "+nombreEmpresa+
             "\nPuesto a disposicion: "+puesto+
             "\nSueldo a cobrar: "+sueldo;
    return salida;
    }
}
------------------------------------------------------------------------------------------

public class DemandaEmpleo extends Empleo {
    private String persona;
    public DemandaEmpleo(Perfil perfil,String persona)
    {
        super(perfil);
    this.persona=persona;
    }
    public String toString()
    {
    String salida="";
    salida="\n"+perfil.toString()+
            "\nNombre del candidato: "+persona;
    return salida;
    }
}
-------------------------------------------------------------------------------------------

import java.util.*;
public class Colocacion {
    ArrayList<Empleo> empleo;
    public Colocacion()       
    {
        empleo=new ArrayList<Empleo>();
    }
    public void agregarOfertaEmpleo (Perfil perfil,String nombreEmpresa, String puesto,double sueldo)
    {       
        empleo.add(new OfertaEmpleo(perfil,nombreEmpresa,puesto,sueldo));
    }
    public void agregarDemandaEmpleo (Perfil perfil,String persona)
    {
        empleo.add(new DemandaEmpleo(perfil,persona));
    }
   
   
    //Recibe un perfil y comprueba si existe al mismo tiempo una oferta y una demanda de empleo
    //con ese perfil
    public boolean hayTrabajo (Perfil perfil) {
    //Determinamos si existe una demanda de empleo dentro del arraylist para ese perfil
    boolean existeOferta = false;
    boolean existeDemanda = false;
   
    for (Empleo e: empleo) {
        if (e instanceof OfertaEmpleo && e.getPerfil().equals(perfil)){
            existeOferta = true;
        }
        if (e instanceof DemandaEmpleo && e.getPerfil().equals(perfil)){
            existeDemanda = true;
        }
    }
   
    if (existeOferta == true & existeDemanda == true) {
        return true;
    } else { return false;}
       
       
    }
   
   
    public String toString()
    {
    String salida="";
    salida="\n"+empleo+"\n";
    return salida;
    }
}

------------------------------------------------------------------------------------------

public class test {
    public static void main (String [] args)
    {
        Colocacion emp=new Colocacion();
       
       
        PerfilEspecialista emp1= new PerfilEspecialista(true,"sumar");
       
        PerfilTitulado emp2= new PerfilTitulado(false,"analisis",true);
       
        PerfilEspecialista emp3= new PerfilEspecialista(true,"restar");
       
        emp.agregarOfertaEmpleo(emp1,"empritotal", "gerente",15000);
        emp.agregarOfertaEmpleo(emp2,"empritotal", "gerente",15000);
       
        PerfilEspecialista demp1= new PerfilEspecialista(true,"sumar");
        PerfilTitulado demp2= new PerfilTitulado(false,"analisis",true);
       
        emp.agregarDemandaEmpleo(demp1,"jose");
        emp.agregarDemandaEmpleo(demp2,"jose");
       
        System.out.println(emp);
       
        System.out.println ("¿Existe dentro de la lista de oferta-demanda una oferta y una demanda para un perfil" +
        "de especialista en sumar? :" + emp.hayTrabajo(emp1));
       
        System.out.println ("¿Existe dentro de la lista de oferta-demanda una oferta y una demanda para un perfil" +
        "de especialista en restar? :" + emp.hayTrabajo(emp3));
       
    }
}
-------------------------------------------------------------------------------------------
                                        resultado del codigo


[
con carnet de conducir
El presente cuenta con la especialidad: sumar
Nombre de la empresa: empritotal
Puesto a disposicion: gerente
Sueldo a cobrar: 15000.0,

sin carnet de conducir
titulo: analisis
El presente cuenta con conocimientos de informatica
Nombre de la empresa: empritotal
Puesto a disposicion: gerente
Sueldo a cobrar: 15000.0,
con carnet de conducir
El presente cuenta con la especialidad: sumar
Nombre del candidato: jose,

sin carnet de conducir
titulo: analisis
El presente cuenta con conocimientos de informatica
Nombre del candidato: jose]

¿Existe dentro de la lista de oferta-demanda una oferta y una demanda para un perfilde especialista en sumar? :true
¿Existe dentro de la lista de oferta-demanda una oferta y una demanda para un perfilde especialista en restar? :false

ledesma90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 42
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #6 en: 16 de Mayo 2013, 00:39 »
Muchísimas gracias alex.....!!!!!! sos lo máximo!!!, en realidad este ejercicio me lo dio el profesor para que lo realice (solo cumplía las ordenes del UML), estoy tan agradecido que para lo que necesites Alex cuenta conmigo.
excelente pagina voy a colaborar con lo que pueda
« Última modificación: 16 de Mayo 2013, 00:43 por ledesma90 »

ledesma90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 42
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #7 en: 16 de Mayo 2013, 09:34 »
hola Alex... estuve mirando tu código y después de un largo análisis de mi parte, entendí unas cuantas cosas

¿qué diferencia hay entre Empleo y Perfil, porque si Empleo lo único que tiene es un atributo Perfil es lo mismo no?
voy a tratar de responder amigo, y pienso que la clase empleo se usa como una caja contenedora del tipo PerfilEspecialista y Perfiltitulado pudiendo elegir el que necesites para cada momento de la instansacion, también pienso que puede contener un objeto de la clase madre Perfil, pero en ese caso seria inútil. Me parece interesante como con solo declarar ese atributo del tipo Perfil puede contener a cualquiera de las subclases, es lo que entiendo amigo, seguro ya sabias todo eso, solo trate de responder :D



Lo que dices: "Un método hayParesOfertaDemandaEmpleo() que devuelva en otro ArrayList los pares oferta y demanda empleo para los perfiles o null si no existe ningún par." no entiendo bien qué es lo que se quiere hacer.

En esta parte hay crear un arraylist nuevo, donde se debe guardar los pares, del que "pide el empleo" y del que "ofrece empleo" y justamente en ese tengo un problema ahora


Código: [Seleccionar]
package perfil;

/**
 *
 * @author jose
 */
public class Perfil {
    private boolean carnetDeConducir;
   
    public Perfil(boolean carnetDeConducir)
    {
    this.carnetDeConducir=carnetDeConducir;
    }
    public String getconducir()
    {
        String s;
        if(carnetDeConducir==true)
        {
        s="con carnet de conducir";
        }
        else
        {
        s="sin carnet de conducir";
        }
        return s;
    }
   
    public boolean getcarnet()
    {
    return carnetDeConducir;
    }
    public String ToString()
    {
    String salida="";
    salida=getconducir();
    return salida;
    }
}
-------------------------------------------------------------------------------------

public class PerfilEspecialista extends Perfil{
    private String especialidad;
    public PerfilEspecialista(boolean carnetDeConducir,String especialidad)
    {
    super(carnetDeConducir);
    this.especialidad=especialidad;
    }
    public String compara()
    {
    return especialidad+super.getcarnet();
    }
   
    public String toString()
    {
    String salida="";
    salida="\n"+getconducir()+
            "\nEl presente cuenta con la especialidad: "+especialidad;
    return salida;
    }
}
-------------------------------------------------------------------------------------

public class PerfilTitulado extends Perfil {
    private String titulo;
    private boolean conocimientoInformatica;
    public PerfilTitulado(boolean carnetDeConducir,String titulo,boolean conocimiento)
    {
    super(carnetDeConducir);
    this.titulo=titulo;
    conocimientoInformatica=conocimiento;
    }                                                                                                                                                       
    public String compara()
    {
    return titulo+conocimientoInformatica+super.getcarnet();
    }
   
    public String getconocimiento()
    {
        String s;
        if(conocimientoInformatica==true)
        {
        s="con conocimientos de informatica";
        }
        else
        {
        s="sin con conocimientos de informatica";
        }
        return s;
    }

    public String toString()
    {
    String salida="";
    salida="\n"+super.getconducir()+
            "\ntitulo: "+titulo+
            "\n"+getconocimiento();
    return salida;
    }
}
---------------------------------------------------------------------------------------

import java.util.*;
public class Empleo {
    protected Perfil perfil;
    public Empleo(Perfil perfil)
    {
        this.perfil=perfil;
    }
    public String toString()
    {
    String salida="";
    return salida;
    }
}
----------------------------------------------------------------------------------------

public class OfertaEmpleo extends Empleo {
    private String nombreEmpresa;
    private String puesto;
    private double sueldo;
    public OfertaEmpleo(Perfil perfil,String nombreEmpresa, String puesto,double sueldo)
    {
        super(perfil);
    this.nombreEmpresa=nombreEmpresa;
    this.puesto=puesto;
    this.sueldo=sueldo;
    }
    public String toString()
    {
    String salida="";
    salida = "\n"+perfil.toString()+
             "\nNombre de la empresa: "+nombreEmpresa+
             "\nPuesto a disposicion: "+puesto+
             "\nSueldo a cobrar: "+sueldo;
    return salida;
    }
}
------------------------------------------------------------------------------------------

public class DemandaEmpleo extends Empleo {
    private String persona;
    public DemandaEmpleo(Perfil perfil,String persona)
    {
        super(perfil);
    this.persona=persona;
    }
    public String toString()
    {
    String salida="";
    salida="\n"+perfil.toString()+
            "\nNombre del candidato: "+persona;
    return salida;
    }
}
-------------------------------------------------------------------------------------------

import java.util.*;
public class Colocacion {
    static ArrayList<Empleo> empleo;
    static ArrayList<Empleo> paresEmpleo;
    static int i,j,p,l=0;
    static String s,so,sa;
    static boolean k;
    final static String q="\nsi no se muestran pares, es posible que no existan";
    public Colocacion()       
    {
        empleo=new ArrayList<Empleo>();
    }
    public void agregarobjeto (Perfil perfil,String nombreEmpresa, String puesto,double sueldo)
    {       
        empleo.add(new OfertaEmpleo(perfil,nombreEmpresa,puesto,sueldo));
    }
    public void agregarobjeto (Perfil perfil,String persona)
    {
        empleo.add(new DemandaEmpleo(perfil,persona));
    }
   
    public static String hayParesOfertaDemandaEmpleo()
    {
        p=0;
        l=0;
        i=0;
        j=0;
        System.out.print("pares");
        for(i=0;i<(empleo.size()-1);i++)
        {
            if(empleo.get(i) instanceof OfertaEmpleo)
            {
            OfertaEmpleo tam=(OfertaEmpleo) empleo.get(i);
            p=1;
                    if(tam.perfil instanceof PerfilEspecialista)
                    {
                    PerfilEspecialista fac=(PerfilEspecialista) tam.perfil;
                    sa=fac.compara();
                    }else if(tam.perfil instanceof PerfilTitulado){
                    PerfilTitulado fac=(PerfilTitulado) tam.perfil;
                    sa=fac.compara();
                    }
            }else if(empleo.get(i) instanceof DemandaEmpleo)
            {
            DemandaEmpleo tam=(DemandaEmpleo) empleo.get(i);
            p=2;
                    if(tam.perfil instanceof PerfilEspecialista)
                    {
                    PerfilEspecialista fac=(PerfilEspecialista) tam.perfil;
                    sa=fac.compara();
                    }else if(tam.perfil instanceof PerfilTitulado){
                    PerfilTitulado fac=(PerfilTitulado) tam.perfil;
                    sa=fac.compara();
                    }
            }
                    for(j=1;j<empleo.size();j++)
                    {   
                        if(empleo.get(j) instanceof OfertaEmpleo)
                        {
                        OfertaEmpleo tom=(OfertaEmpleo) empleo.get(j);
                        l=1;
                                if(tom.perfil instanceof PerfilEspecialista)
                                {
                                PerfilEspecialista foc=(PerfilEspecialista) tom.perfil;
                                so=foc.compara();
                                }else if(tom.perfil instanceof PerfilTitulado){
                                PerfilTitulado foc=(PerfilTitulado) tom.perfil;
                                so=foc.compara();
                                }
                        }else if(empleo.get(j) instanceof DemandaEmpleo)
                        {
                        DemandaEmpleo tom=(DemandaEmpleo) empleo.get(j);
                        l=2;
                                if(tom.perfil instanceof PerfilEspecialista)
                                {
                                PerfilEspecialista foc=(PerfilEspecialista) tom.perfil;
                                so=foc.compara();
                                }else if(tom.perfil instanceof PerfilTitulado){
                                PerfilTitulado foc=(PerfilTitulado) tom.perfil;
                                so=foc.compara();
                                }
                        }
                       
                       
                        if(p!=l&& so.equals(sa))
                        {
                        System.out.println(empleo.get(i)+" "+empleo.get(j));
                        //paresEmpleo.add(empleo.get(i));
                        //paresEmpleo.add(empleo.get(j));
                        }
                    l=0;
                    }
        p=0;
        }
            return q;
    }
   
    public static boolean haytrabajo(Perfil perfi)
    {
        i=0;
        k=false;
        if(perfi instanceof PerfilTitulado)
        {
        PerfilTitulado prin=(PerfilTitulado) perfi;
        s=prin.compara();
        }
        else if(perfi instanceof PerfilEspecialista)
        {
        PerfilEspecialista prin=(PerfilEspecialista) perfi;
        s=prin.compara();
        }
                    for(int i=0;i<empleo.size();i++);
                    {
                            if(empleo.get(i) instanceof OfertaEmpleo)
                            {
                             OfertaEmpleo tom=(OfertaEmpleo) empleo.get(i);
                                if(tom.perfil instanceof PerfilTitulado)
                                {
                                PerfilTitulado tam=(PerfilTitulado) tom.perfil;
                                       if(tam.compara().equals(s))
                                       {
                                        k=true;   
                                       }
                                }
                               
                                if(tom.perfil instanceof PerfilEspecialista)
                                {
                                PerfilEspecialista tam=(PerfilEspecialista) tom.perfil;
                                       if(tam.compara().equals(s))
                                       {
                                       k=true;
                                       }
                                }
                             }
                    }
                   
    return k;
    }
   
    public String toString()
    {
    String salida="";
    salida+="";
    return salida;
    }
}

------------------------------------------------------------------------------------------
public class test {
    public static void main (String [] args)
    {
        /*PerfilEspecialista emp= new PerfilEspecialista(true,"sumar");
        OfertaEmpleo pleo=new OfertaEmpleo(emp,"empritotal","gerente",15000);
       
        PerfilTitulado emp1= new PerfilTitulado(false,"analisis en sistemas",true);
        DemandaEmpleo pleo1=new DemandaEmpleo(emp1,"jose");
    System.out.println(pleo.toString()+"\n");
    System.out.println(pleo1.toString()+"\n");*/
        Colocacion emp=new Colocacion();
       
       
        PerfilEspecialista emp1= new PerfilEspecialista(false,"sumar");
        PerfilTitulado emp2= new PerfilTitulado(false,"analisis",true);
       
        emp.agregarobjeto(emp1,"empri", "gerente",15000);
        emp.agregarobjeto(emp1,"tronqui", "gerente",15000);
        emp.agregarobjeto(emp2,"ñequi", "gerente",15000);
       
        PerfilEspecialista demp1= new PerfilEspecialista(false,"restar");
        PerfilTitulado demp2= new PerfilTitulado(false,"analisis",true);
       
        emp.agregarobjeto(demp1,"jose");
        emp.agregarobjeto(demp2,"jose");
       
        System.out.println(emp);
        /*System.out.println(emp.haytrabajo(demp1));*/
        System.out.println(emp.hayParesOfertaDemandaEmpleo());
       
    }
}
-------------------------------------------------------------------------------------------
                                        resultado del codigo

pares

sin carnet de conducir
titulo: analisis
con conocimientos de informatica
Nombre de la empresa: ñequi
Puesto a disposicion: gerente
Sueldo a cobrar: 15000.0

sin carnet de conducir
titulo: analisis
con conocimientos de informatica
Nombre del candidato: jose

si no se muestran pares, es posible que no existan

ledesma90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 42
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #8 en: 16 de Mayo 2013, 09:48 »
he dejado ese código por si pudieras ver la linea 98 y 99 de colocacion en las cuales no me deja agregar a un nuevo arraylist los pares del que solicita el empleo y del que ofrece el empleo, quiero mencionar que mire tu código pero como no lo comprendo al 100 % y decidi hacerlo  mi manera, obviamente tu código voy a seguir analizando.

hasta el momento he logrado conseguir los pares con el método hayParesOfertaDemandaEmpleo() de colocacion, el problema es que no me deja agregarlos al (arraylistnuevo), por que si ejecutas el programa así te imprime los pares
gracias por la ayuda Alex y si ya estoy abusando de la ayuda, favor de avisar, no quiero molestar
« Última modificación: 16 de Mayo 2013, 09:50 por ledesma90 »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2052
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #9 en: 16 de Mayo 2013, 20:04 »
Aquí no hay problema en preguntar así que no te preocupes, lo único que puede pasar es que si las preguntas son muy complicadas o no se encuentra alguien dispuesto a responder se quede sin respuesta, pero por preguntar no pasa nada, aquí nadie molesta y nadie lo sabe todo.

Sobre las partes de mi código que no entiendas si quieres lo vamos viendo para ir solucionando las dudas que te responderé encantado siempre que pueda. ¿Lo que hace el código que te dejé es lo que tú querías?

Sobre la creación de pares no he mirado tu código porque no he tenido tiempo pero la idea que tengo sería la siguiente:

crear una nueva clase denominada ParOfertaDemanda con dos atributos, uno de ellos OfertaEmpleo y otro DemandaEmpleo.

Luego dentro del método colocación habría un método denominado encontrarParesOfertaDemanda que lo que hiciera es recorrer el arrayList de colocacion aplicando el método hayTrabajo. Si encuentra que hayTrabajo guarda el par en otro arrayList de ParOfertaDemanda, si no no lo guarda. Antes de guardar habría que comprobar que no exista ya, porque al existir coincidencia se guardaría dos veces. Esto tendría que pensarlo con calma.
« Última modificación: 17 de Mayo 2013, 19:17 por Alex Rodríguez »

ledesma90

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 42
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #10 en: 17 de Mayo 2013, 17:41 »
ya solucione el código, por fin!!  ;D. Estuve también mirando tu código ,y ya lo tengo totalmente claro, gracias alex sin tu ayuda no iba a poder solucionarlo ;) saludos

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2052
    • Ver Perfil
Re:ayuda java ArrayList
« Respuesta #11 en: 17 de Mayo 2013, 19:18 »
Pues me alegro!!! Saludos  ;D


 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".