Usted deber´a realizar un programa que permita manejar a los integrantes de distintas familias, as´ı como a los pasatiempos de cada uno de esos integrantes. Para ello contar´a con un m´etodo main que ya viene implementado.
El programa lo dividiremos en 3 subconjuntos incrementales. Le recomendamos no comenzar con el siguiente subconjunto hasta terminar y probar el funcionamiento correcto del subconjunto actual.
No puede utilizar el m´etodo contains de la clase String. Incremento 1
En este primer incremento deber´a definir lo b´asico de las clases Familia y Persona, de modo de poder crearlas. Una Persona est´a caracterizada por su nombre, su edad y su g´enero, el cual se representa con un 0 si es hombre o un 1 en caso que sea mujer. Adem´as cada persona tiene sus pasatiempos, los cuales se representan con un string en el cual se van concatenando los pasatiempos que se van agregando. Su clase Personadebe cumplir con los usos dados en el main dado, el cual usted no puede modificar.
Por su parte Familia est´a caracterizado por los apellidos de la familia y por hasta 5 personas que son los integrantes de la familia. Al igual que Persona, Familia debe poder ser utilizada con el main predefinido, por lo que debe coincidir los nombres de los m´etodos que ah´ı se encuentran as´ı como los par´ametros de cada uno.
Incremento 2
Ahora que ya est´an creadas las familias, debe agregar los m´etodos necesarios a sus clases para que sea posible mostrar en consola cada familia. Una familia se muestra indicando sus apellidos y el nombre, edad y g´enero de cada uno de sus integrantes. Este es un ejemplo de como se muestra una familia en consola:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Familia : Palma S e p u l v e d a Juan (25 - Hombre ) Maria (43 - Mujer ) Pedro (12 - Hombre ) Pablo (48 - Hombre ) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Adem´as cada familia debe ser capaz de retorna el promedio de edad de la familia, para que as´ı el main pueda mostrarlos.
Incremento 3
Por ´ultimo debe ser posible buscar el n´umero de integrantes que tiene un cierto pasatiempo en cada familia. Pudiendo tambi´en realizar esta b´usqueda en un g´enero en particular. Nuevamente debe cumplir con lo defi- nido en el main.
import i i c 1 1 0 3 P a c k a g e .*;
public class P r i n c i p a l {
public static void main (String[] args ) {
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I t e r a c i o n 1
*/
// Creamos todas las familias con sus r e s p e c t i v a s personas y p a s a t i e m p o s Familia f1 = new Familia (" Palma S e p u l v e d a");
Persona p11 = new Persona (" Juan ", 25 , 0); p11 . a g r e g a r P a s a t i e m p o(" Futbol ");
p11 . a g r e g a r P a s a t i e m p o(" Piano ");
Persona p12 = new Persona (" Maria ", 43 , 1); p12 . a g r e g a r P a s a t i e m p o(" Leer ");
Persona p13 = new Persona (" Pedro ", 12 , 0); p13 . a g r e g a r P a s a t i e m p o(" TV ");
Persona p14 = new Persona (" Pablo ", 48 , 0); p14 . a g r e g a r P a s a t i e m p o(" Leer "); p14 . a g r e g a r P a s a t i e m p o(" Futbol "); p14 . a g r e g a r P a s a t i e m p o(" Comer "); f1 . a g r e g a r I n t e g r a n t e( p11 ); f1 . a g r e g a r I n t e g r a n t e( p12 ); f1 . a g r e g a r I n t e g r a n t e( p13 ); f1 . a g r e g a r I n t e g r a n t e( p14 );
Familia f2 = new Familia (" Langdon Alarcon "); Persona p21 = new Persona (" Carolina ", 13 , 1); p21 . a g r e g a r P a s a t i e m p o(" Bailar ");
p21 . a g r e g a r P a s a t i e m p o(" Leer ");
Persona p22 = new Persona (" Isabel ", 17 , 1); p22 . a g r e g a r P a s a t i e m p o(" Cantar ");
p22 . a g r e g a r P a s a t i e m p o(" Leer "); p22 . a g r e g a r P a s a t i e m p o(" Futbol ");
Persona p23 = new Persona (" Jose ", 30 , 0); p23 . a g r e g a r P a s a t i e m p o(" Futbol ");
p23 . a g r e g a r P a s a t i e m p o(" Comer "); f2 . a g r e g a r I n t e g r a n t e( p21 ); f2 . a g r e g a r I n t e g r a n t e( p22 ); f2 . a g r e g a r I n t e g r a n t e( p23 );
Familia f3 = new Familia (" Eterovic Zavala "); Persona p31 = new Persona (" Yadran ", 45 , 0); p31 . a g r e g a r P a s a t i e m p o(" Tenis ");
p31 . a g r e g a r P a s a t i e m p o(" Leer ");
Persona p32 = new Persona (" Tere ", 19 , 1); p32 . a g r e g a r P a s a t i e m p o(" Comer ");
p32 . a g r e g a r P a s a t i e m p o(" Leer "); p32 . a g r e g a r P a s a t i e m p o(" Bailar ");
Persona p33 = new Persona (" Sole ", 30 , 1); p33 . a g r e g a r P a s a t i e m p o(" Leer ");
Persona p34 = new Persona (" S e b a s t i a n", 52 , 0); p33 . a g r e g a r P a s a t i e m p o(" Tenis ");
p33 . a g r e g a r P a s a t i e m p o(" Cocinar "); p33 . a g r e g a r P a s a t i e m p o(" Comer ");
Persona p35 = new Persona (" F r a n c i s c o", 35 , 0); p33 . a g r e g a r P a s a t i e m p o(" Futbol ");
p33 . a g r e g a r P a s a t i e m p o(" Leer ");
Persona p36 = new Persona (" Matias ", 25 , 0); p33 . a g r e g a r P a s a t i e m p o(" Futbol "); p33 . a g r e g a r P a s a t i e m p o(" Cocinar "); f3 . a g r e g a r I n t e g r a n t e( p31 ); f3 . a g r e g a r I n t e g r a n t e( p32 ); f3 . a g r e g a r I n t e g r a n t e( p33 ); f3 . a g r e g a r I n t e g r a n t e( p34 ); f3 . a g r e g a r I n t e g r a n t e( p35 );
// El metodo agregar persona debe retornar false si no es posible // hacerlo porque ya esta llena la familia .
if (! f3 . a g r e g a r I n t e g r a n t e( p36 )) {
Usuario . m e n s a j e C o n s o l a(" No se pudo agregar " + p36 . g e t N o m b r e() + " a la familia " + f3 . g e t A p e l l i d o s ());
}
Familia f4 = new Familia (" Peralta Jara "); Persona p41 = new Persona (" Fernando ", 26 , 0); p41 . a g r e g a r P a s a t i e m p o(" Tenis ");
p41 . a g r e g a r P a s a t i e m p o(" Leer "); p41 . a g r e g a r P a s a t i e m p o(" Cantar ");
Persona p42 = new Persona (" Cata ", 24 , 1); p42 . a g r e g a r P a s a t i e m p o(" Bailar "); p42 . a g r e g a r P a s a t i e m p o(" Yoga "); p42 . a g r e g a r P a s a t i e m p o(" Cocinar "); p42 . a g r e g a r P a s a t i e m p o(" Viajar "); f4 . a g r e g a r I n t e g r a n t e( p41 ); f4 . a g r e g a r I n t e g r a n t e( p42 ); /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I t e r a c i o n 2 */ // M o s t r a m o s cada familia
// M o s t r a m o s el promedio de edad de cada familia
Usuario . m e n s a j e C o n s o l a(" Edad Familia : " + f1 . g e t A p e l l i d o s() + " - "
+ f1 . p r o m e d i o E d a d ());
Usuario . m e n s a j e C o n s o l a(" Edad Familia : " + f2 . g e t A p e l l i d o s() + " - "
+ f2 . p r o m e d i o E d a d ());
Usuario . m e n s a j e C o n s o l a(" Edad Familia : " + f3 . g e t A p e l l i d o s() + " - "
+ f3 . p r o m e d i o E d a d ());
Usuario . m e n s a j e C o n s o l a(" Edad Familia : " + f4 . g e t A p e l l i d o s() + " - "
+ f4 . p r o m e d i o E d a d ());
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I t e r a c i o n 3
*/
// Buscamos la cantidad de personas con p a s a t i e m p o Futbol en cada // familia
Usuario . m e n s a j e C o n s o l a(" Personas que les gusta el futbol Familia : "
+ f1 . g e t A p e l l i d o s() + " - "
+ f1 . i n t e g r a n t e s C o n P a s a t i e m p o(" Futbol "));
Usuario . m e n s a j e C o n s o l a(" Personas que les gusta el futbol Familia : "
+ f2 . g e t A p e l l i d o s() + " - "
+ f2 . i n t e g r a n t e s C o n P a s a t i e m p o(" Futbol "));
Usuario . m e n s a j e C o n s o l a(" Personas que les gusta el futbol Familia : "
+ f3 . g e t A p e l l i d o s() + " - "
+ f3 . i n t e g r a n t e s C o n P a s a t i e m p o(" Futbol "));
Usuario . m e n s a j e C o n s o l a(" Personas que les gusta el futbol Familia : "
+ f4 . g e t A p e l l i d o s() + " - "
+ f4 . i n t e g r a n t e s C o n P a s a t i e m p o(" Futbol "));
// Ahora m o s t r a m o s la cantidad de mujeres que les gusta leer por cada // familia
Usuario . m e n s a j e C o n s o l a(" Mujeres que les gusta leer Familia : "
+ f1 . g e t A p e l l i d o s() + " - "
+ f1 . i n t e g r a n t e s C o n P a s a t i e m p o P o r G e n e r o(" Leer ", 1)); Usuario . m e n s a j e C o n s o l a(" Mujeres que les gusta leer Familia : "
+ f2 . g e t A p e l l i d o s() + " - "
+ f2 . i n t e g r a n t e s C o n P a s a t i e m p o P o r G e n e r o(" Leer ", 1)); Usuario . m e n s a j e C o n s o l a(" Mujeres que les gusta leer Familia : "
+ f3 . g e t A p e l l i d o s() + " - "
+ f3 . i n t e g r a n t e s C o n P a s a t i e m p o P o r G e n e r o(" Leer ", 1)); Usuario . m e n s a j e C o n s o l a(" Mujeres que les gusta leer Familia : "
+ f4 . g e t A p e l l i d o s() + " - " + f4 . i n t e g r a n t e s C o n P a s a t i e m p o P o r G e n e r o(" Leer ", 1)); } } Criterios de soluci´on Clase Persona
• Atributos: Declaramos los atributos necesarios seg´un nos indican en el enunciado: dos String, uno para el nombre y otro para los pasatiempos y dos enteros, uno para representar la edad y otro para representar el g´enero.
• Constructor: Lo declaramos seg´un el uso mostrado en la clase Principal. Recibe como par´ametros el nombre, la edad y el genero y los asigna a los atributos correspondientes.
• M´etodo agragarPasatiempo: Lo declaramos seg´un el uso mostrado en la clase Principal. Recibe como par´ametro un String con el hobbie a agregar y tenemos que concatenarlo al String que almacena los pasatiempos.
• Getters: Seg´un el uso dado en la clase Principal necesitamos 3 m´etodos get para obtener el nombre, la edad y el g´enero.
• M´etodo tienePasatiempo: Este m´etodo sirve para revisar si la persona tiene un determinado pasatiempo (para cumplir con lo pedido en el incremento 3), puede hacerse tambi´en s´olo en la clase Familia. Lo que hacemos es buscar el pasatiempo generando todos los substrings desde la lista de pasatiempos que tengan el mismo largo que el pasatiempo recibido y comparar hasta encontrar alguna coincidencia.
• M´etodo mostrar: Revisamos el g´enero de la persona y seg´un eso mostramos en Consola su edad seguida de ’Hombre’ o ’Mujer’ seg´un corresponda.
Clase Familia:
• Atributos: Declaramos los atributos necesarios seg´un lo que se nos indica en el enunciado: un String para guardar los apellidos y cuatro objetos de la clase Persona que representen a los integrantes. • Constructor: Lo declaramos seg´un el uso mostrado en la clase Principal. Recibe como par´ametro
un String con los apellidos y lo asigna al atributo correspondiente.
• M´etodo agregarIntegrante: Lo declaramos seg´un el uso mostrado en la clase Principal. Recibe como par´ametro un objeto de la clase Persona. Tenemos que revisar a qu´e objeto, de los 4 que tenemos como atributos, debemos asignarlo, revisando cu´al de ellos es todav´ıa null. Retornamos true o false seg´un se pudo o no asignar el integrante.
• M´etodo getApellidos: Retorna los apellidos de la familia.
• M´etodo promedioEdad: Recorremos todas las personas y obtenemos su edad (cuidando que el integrante no sea null) calculando con esto el promedio.
• M´etodo mostrarFamilia: Mostramos en la consola los apellidos de la familia y por cada persona mostramos su edad y si es hombre o mujer.
• M´etodo integrantesConPasatiempo: Para no implementar un m´etodo dos veces simplemente llamamos al m´etodo integrantesConPasatiempoPorGenero definiendo un valor inv´alido para el g´enero.
• M´etodo integrantesConPasatiempoPorGenero: Recorremos todas las personas y en cada una revisamos que no sea nula y que tenga el pasatiempo solicitado (llamando al m´etodo que imple- mentamos en la clase Persona). Adem´as, en caso que el g´enero sea v´alido, tambi´en revisamos que el genero de la persona corresponda. Si se cumplen ambas condiciones aumentamos el contador de personas, el cual retornamos al finalizar el m´etodo.
Posible soluci´on
import i i c 1 1 0 3 P a c k a g e .*;
public class Familia {
// D e f i n i m o s los a t r i b u t o s n e c e s a r i o s
private String a p e l l i d o s;
// D e f i n i m o s las personas que pueden integrar la familia
private Persona i n t e g r a n t e 1;
private Persona i n t e g r a n t e 2;
private Persona i n t e g r a n t e 3;
private Persona i n t e g r a n t e 4;
private Persona i n t e g r a n t e 5;
public Familia (String a p e l l i d o s) {
this. a p e l l i d o s = a p e l l i d o s; }
public Persona o b t e n e r P e r s o n a(int idx ) {
// O b t e n e m o s la persona segun el indice de ella
if ( idx == 0) return i n t e g r a n t e 1; else if ( idx == 1) return i n t e g r a n t e 2; else if ( idx == 2) return i n t e g r a n t e 3; else if ( idx == 3) return i n t e g r a n t e 4; else return i n t e g r a n t e 5; }
} else if ( i n t e g r a n t e 3 == null) { i n t e g r a n t e 3 = p ; } else if ( i n t e g r a n t e 4 == null) { i n t e g r a n t e 4 = p ; } else if ( i n t e g r a n t e 5 == null) { i n t e g r a n t e 5 = p ; } else {
// Si no hay ninguno vacio entonces r e t o r n a m o s false
return false; }
return true; }
public double p r o m e d i o E d a d () {
// D e c l a r a m o s una variable donde a c u m u l a r e m o s
double promedio = 0;
int count = 0;
// R e c o r r e m o s todas las personas
for (int i = 0; i < 5; i ++) { Persona p = o b t e n e r P e r s o n a( i );
if ( p != null) {
// En caso de estar la persona a c u m u l a m o s su edad promedio += p . getEdad ();
count ++; }
}
return promedio / count ; }
public int i n t e g r a n t e s C o n P a s a t i e m p o(String hobbie ) {
// Llamamos al metodo que busca con genero d e f i n i e n d o un valor invalido // para el genero
return i n t e g r a n t e s C o n P a s a t i e m p o P o r G e n e r o( hobbie , -1); }
public int i n t e g r a n t e s C o n P a s a t i e m p o P o r G e n e r o(String hobbie , int genero ) {
int count = 0;
// R e c o r r e m o s todas las personas
for (int i = 0; i < 5; i ++) { Persona p = o b t e n e r P e r s o n a( i );
// R e v i s a m o s que no sea nula y que tenga el p a s a t i e m p o s o l i c i t a d o. // Ademas en caso de que el
// genero sea valido tambien r e s t r i n g i m o s por el
if ( p != null && p . t i e n e P a s a t i e m p o( hobbie ) && ( genero == -1 || p . g e t G e n e r o() == genero )) count ++;
}
return count ; }
public void m o s t r a r F a m i l i a () {
// M o s t r a m o s los a p e l l i d o s y luego a cada una de las personas
Usuario . m e n s a j e C o n s o l a(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "); Usuario . m e n s a j e C o n s o l a(" Familia : " + a p e l l i d o s); for (int i = 0; i < 5; i ++) { Persona p = o b t e n e r P e r s o n a( i ); if ( p != null) { p . mostrar (); } } Usuario . m e n s a j e C o n s o l a(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "); } public String g e t A p e l l i d o s () { return a p e l l i d o s; } } import i i c 1 1 0 3 P a c k a g e .*;
public class Persona {
// D e f i n i m o s los a t r i b u t o s minimos n e c e s a r i o s
private String nombre ;
private int edad ;
private int genero ;
public Persona (String nombre , int edad , int genero ) {
// I n i c i a l i z a m o s los valores para la persona , en un p r i n c i p i o no tiene // p a s a t i e m p o s
this. nombre = nombre ;
this. edad = edad ;
this. genero = genero ;
this. p a s a t i e m p o s = " "; }
public void a g r e g a r P a s a t i e m p o(String hobbie ) {
// Al agregar un p a s a t i e m p o lo a g r e g a m o s al String que los r e p r e s e n t a p a s a t i e m p o s += " - " + hobbie ;
}
public String g e t N o m b r e() {
return nombre ; }
public int getEdad () {
return edad ; }
public int g e t G e n e r o() {
return genero ; }
public boolean t i e n e P a s a t i e m p o(String hobbie ) {
// Buscamos el p a s a t i e m p o g e n e r a n d o todos los s u b s t r i n g s desde la lista // de p a s a t i e m p o s que tengan el mismo largo que el p a s a t i e m p o recibido
for (int i = 0; i <= p a s a t i e m p o s. length () - hobbie . length (); i ++) {
String aux = p a s a t i e m p o s. s u b s t r i n g(i , i + hobbie . length ());
if ( aux . e q u a l s I g n o r e C a s e( hobbie )) { return true; } } return false; }
public void mostrar () {
if ( genero == 0) {
Usuario . m e n s a j e C o n s o l a( nombre + " ( " + edad + " - Hombre ) "); } else {
Usuario . m e n s a j e C o n s o l a( nombre + " ( " + edad + " - Mujer ) "); }
} }