Java - ArrayList como atributo de una clase

 
Vista:

ArrayList como atributo de una clase

Publicado por Damiana (2 intervenciones) el 05/09/2021 00:46:08
Buenas amigos programadores, yo estoy comenzando y tengo un problema, Tengo dos clases entidades (Persona y Perro) y Perro además de clase es un atributo de Persona o sea tienen una relación. Aparte hice un Enum para Tamaño del perro. Mi Problema es que le asigna la misma lista de perro a las dos personas que cree, Quiero hacer que a la persona p1 le asigne dos perros y a la persona p2 un perro.

Clase Persona

.import java.util.ArrayList;
import java.util.List;

/**
*
* @author damiana
*/
public class Persona {
private String nombre;
private String apellido;
private String dni;
private ArrayList<Perro> mascota;

public Persona() {
}


public Persona(String nombre, String apellido, String dni, ArrayList<Perro> mascota) {
this.nombre = nombre;
this.apellido = apellido;
this.dni = dni;
this.mascota = mascota;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

public String getDni() {
return dni;
}

public void setDni(String dni) {
this.dni = dni;
}

public List<Perro> getMascota() {
return mascota;
}

public void setMascota(ArrayList<Perro> mascota) {
this.mascota = mascota;
}

@Override
public String toString() {
return "Persona{" + "nombre=" + nombre + ", apellido=" + apellido + ", dni=" + dni + ", mascota=" + mascota + '}';
}

Clase Perro

import relacionesej1.tamaño.Tamaño;

/**
*
* @author damiana
*/
public class Perro {
private String nombre;
private String raza;
private Integer edad;
private Tamaño tamaño;

public Perro() {
}



public Perro(String nombre, String raza, Integer edad, Tamaño tamaño) {
this.nombre = nombre;
this.raza = raza;
this.edad = edad;
this.tamaño = tamaño;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getRaza() {
return raza;
}

public void setRaza(String raza) {
this.raza = raza;
}

public Integer getEdad() {
return edad;
}

public void setEdad(Integer edad) {
this.edad = edad;
}

public Tamaño getTamaño() {
return tamaño;
}

public void setTamaño(Tamaño tamaño) {
this.tamaño = tamaño;
}

@Override
public String toString() {
return "Perro{" + "nombre=" + nombre + ", raza=" + raza + ", edad=" + edad + ", tama\u00f1o=" + tamaño + '}';
}

Clase Main

import java.util.ArrayList;

import relacionesej1.tamaño.Tamaño;

/**
*
* @author damiana
*/
public class Relacionesej1 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ArrayList<Perro>mascota= new ArrayList();
Persona p1= new Persona();
p1.setApellido("Rodriguez");
p1.setDni("23456443");
p1.setNombre("Lorenza");


Persona p2= new Persona();
Perro d1= new Perro();
d1.setEdad(2);
d1.setNombre("Abbey");
d1.setRaza("mixto");
d1.setTamaño(Tamaño.MEDIANO);

Perro d2= new Perro();
d2.setEdad(3);
d2.setNombre("Julian");
d2.setRaza("Cocker");
d2.setTamaño(Tamaño.PEQUEÑO);

mascota.add(d1);
mascota.add(d2);
p1.setMascota(mascota);
Perro d3= new Perro();
d3.setEdad(4);
d3.setNombre("Fede");
d3.setRaza("caniche");
d3.setTamaño(Tamaño.PEQUEÑO);
mascota.add(d3);
p2.setMascota(mascota);
p2.setApellido("Gonzalez");
p2.setDni("28947362");
p2.setNombre("Gonzalo");



System.out.println(p1.toString());
System.out.println(p2.toString());
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ArrayList como atributo de una clase

Publicado por Kabuto (1381 intervenciones) el 05/09/2021 11:14:41
Lo que necesitas es que Persona tenga un método para recibir UN perro y añadirlo a su propio ArrayList, en lugar de recibir un ArrayList completo.

Eso sí, tendrás que asegurarte de que el ArrayList de Persona está inicializado. Puedes hacerlo aprovechando el constructor "vacío" que no recibe parámetros.
Por ejemplo:

1
2
3
4
5
6
7
8
9
public class Persona {
private String nombre;
private String apellido;
private String dni;
private ArrayList<Perro> mascota;
 
public Persona() {
    mascota = new ArrayList<Perro>();
}

Y luego un método para recibir perros de forma individual y poder añadirlos al ArrayList

1
2
3
public void añadirPerro(Perro per) {
    mascota.add(per);
}


Así, luego en el main(), en lugar de enviarles ArrayList completos a las personas, les envías perros individuales.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public static void main(String[] args) {
 
    Persona p1= new Persona();
    p1.setApellido("Rodriguez");
    p1.setDni("23456443");
    p1.setNombre("Lorenza");
 
    Persona p2= new Persona();
    p2.setApellido("Gonzalez");
    p2.setDni("28947362");
    p2.setNombre("Gonzalo");
 
    Perro d1= new Perro();
    d1.setEdad(2);
    d1.setNombre("Abbey");
    d1.setRaza("mixto");
    d1.setTamaño(Tamaño.MEDIANO);
 
    Perro d2= new Perro();
    d2.setEdad(3);
    d2.setNombre("Julian");
    d2.setRaza("Cocker");
    d2.setTamaño(Tamaño.PEQUEÑO);
 
    p1.añadirPerro(d1);
    p1.añadorPerro(d2);
 
    Perro d3= new Perro();
    d3.setEdad(4);
    d3.setNombre("Fede");
    d3.setRaza("caniche");
    d3.setTamaño(Tamaño.PEQUEÑO);
 
    p2.añadirPerro(d3);
 
    System.out.println(p1.toString());
    System.out.println(p2.toString());
}



Por cierto, hemos usado la letra ñ en el código y es importante comentar que no es aconsejable.
A nosotros nos va a funcionar, pero siempre mejor usar caracteres y símbolos propios del alfabeto inglés, para evitar posibles problemas de compatibilidad.
Si por ejemplo, formásemos parte de un equipo de programación y compartieramos nuestros código con alguien de un país que no sea de habla hispana, seguramente tendría problemas.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ArrayList como atributo de una clase

Publicado por Damiana (2 intervenciones) el 05/09/2021 16:27:47
Muchas gracias sos muy amable, entiendo lo que decís de los caracteres del código, esto es solo a nivel personal de ejercitar. Siempre dispuesta a aprender.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar