Java - Creación de un objeto que tiene por atributo un array.

 
Vista:
sin imagen de perfil

Creación de un objeto que tiene por atributo un array.

Publicado por Javier (3 intervenciones) el 18/11/2015 01:15:33
Buenas noches, soy nuevo en el foro y mi nombre es Javi.

Mi consulta es la siguiente. Estoy realizando un pequeño programa en Java y tengo una clase Alumno. El alumno está compuesto por nombre, apellido/s, edad y una lista/colección de asignaturas, (lo que pretendo es que las asignaturas sean un array). Es decir, un alumno tiene nombre, apellido/s, edad y asignaturas.

Nombre: Pepito
Apellido: Pérez
Edad: 21
Asignaturas: Lógica, Cálculo, Programación,etc...

Mi duda surge al inicializar en el constructor de la clase Alumno. Yo creo que sería algo como esto:

1
2
3
4
5
6
7
public Alumno (String nombre, String apellido, int edad, String [] asignaturas)
{
         this.nombre = nombre;
         this.apellido = apellido;
         this.edad = edad;
         this.asignaturas = new String[asignaturas];
}

Hasta aquí todo correcto, o eso creo.

La parte que no alcanzo a ver sería en la clase Colegio, que suponemos que tiene un ArrayList de alumnos, y mi problema es que no se como debo añadir correctamente un alumno a la clase colegio. Yo pretendo hacer algo así

1
2
3
4
5
6
7
8
9
10
11
12
public class Colegio
{
/*code*/
        private ArrayList<Alumno> mis_alumnos = new ArrayList<>();
 
         /* pedimos datos del alumno*/
        for (int i = 0; i < total_asignaturas_matriculadas; i++)
        {
                 Alumno nuevo = new Alumno(nombre, apellido, edad, asignaturas [i]);
        }
        mis_alumnos.add(nuevo);
}

Pues en resumidas cuentas el problema viene a ser ese, como añadir ese nuevo alumno a mis alumnos sabiendo que uno de los atributos es un array.

Por si sirve de algo el error que muestra es algo como: String cannot be converted to String[].
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 Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Creación de un objeto que tiene por atributo un array.

Publicado por Lawliet (303 intervenciones) el 18/11/2015 03:49:40
Hola...

Tienes la idea aunque como todo programador cuando inicia tiene fallas. Te proporciono el código con el fin de entender mejor el enunciado planteado por tu problema.

Alumno.java
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
39
40
41
42
43
44
45
public class Alumno {
	private String nombre;
	private String apellido;
	private int edad;
	private String[] asignaturas;
 
	public Alumno(String nombre, String apellido, int edad, String[] asignaturas) {
		this.nombre = nombre;
		this.apellido = apellido;
		this.edad = edad;
		this.asignaturas = asignaturas;
	}
 
	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 int getEdad() {
		return edad;
	}
 
	public void setEdad(int edad) {
		this.edad = edad;
	}
 
	public String[] getAsignaturas() {
		return asignaturas;
	}
 
	public void setAsignaturas(String[] asignaturas) {
		this.asignaturas = asignaturas;
	}
}

No creo que tenga mucho que explicar con el código anterior ya que podemos ver que es una clase la cual tiene sus respectivos atributos privados con sus respectivos métodos públicos que acceden a dichos atributos, esto es mejor conocido como Encapsulación, uno de los pilares de la Programación Orientada a Objetos. Lo único a resaltar es que uno de esos atributos es un arreglo de String por lo tanto cuando nosotros hacemos la instancia al objeto Alumno, debemos de pasar un arreglo de String.

Colegio.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Colegio {
	private List<Alumno> alumno;
 
	public Colegio(List<Alumno> alumno) {
		this.alumno = alumno;
	}
 
	public List<Alumno> getAlumno() {
		return alumno;
	}
 
	public void setAlumno(List<Alumno> alumno) {
		this.alumno = alumno;
	}
}

Creamos una clase Colegio la cual contendrá un atributo del tipo Alumno la cual viene siendo una lista, tal y como podemos ver en el código anterior.

Main.java
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
public class Ejercicio {
	public static void main(String[] args) {
		List<Alumno> list = new ArrayList<Alumno>();
		String[] asignaturas = {"Literatura","Matematicas","Ciencias"};
		Alumno alumno = new Alumno("Elle", "Lawliet", 24, asignaturas);
		list.add(alumno);
		alumno = new Alumno("Pepito", "Perez", 21, asignaturas);
		list.add(alumno);
		alumno = new Alumno("Javi", "Madrid", 20, asignaturas);
		list.add(alumno);
 
		Colegio colegio = new Colegio(list);
 
		for(Alumno datos : colegio.getAlumno()){
			System.out.println("NOMBRE: " + datos.getNombre());
			System.out.println("APELLIDO: " + datos.getApellido());
			System.out.println("EDAD: " + datos.getEdad());
			System.out.println("ASIGNATURAS:");
			for (int i = 0; i < datos.getAsignaturas().length; i++){
				System.out.println("* " + datos.getAsignaturas()[i]);
			}
			System.out.println();
		}
	}
}

Primeramente, es importante crear una lista del tipo Alumno ya con la información de los alumnos, como tenemos un arreglo como atributo entonces es importante crear un arreglo con las asignaturas correspondientes y así pasarlo a nuestro objeto. Es importante mencionar que para este ejemplo, yo estoy haciendo que mis tres alumnos tengan las mismas asignaturas, sin embargo, si tu necesidad es que cada alumno tenga sus propias asignaturas entonces deberías crear una arreglo para cada uno de ellos, no obstante, a mi punto de vista y como consejo en vez de utilizar un arreglo mejor usa una lista con todas las asignaturas.

Posteriormente nosotros hacemos una instancia de nuestra clase Colegio, pasando como parámetro al constructor la lista creada previamente. Finalmente solamente es cuestión de iterar nuestro objeto, además como tenemos un arreglo en nuestros atributos también sera necesario recorrerlo.

Output
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
NOMBRE: Elle
APELLIDO: Lawliet
EDAD: 24
ASIGNATURAS:
* Literatura
* Matematicas
* Ciencias
 
NOMBRE: Pepito
APELLIDO: Perez
EDAD: 21
ASIGNATURAS:
* Literatura
* Matematicas
* Ciencias
 
NOMBRE: Javi
APELLIDO: Madrid
EDAD: 20
ASIGNATURAS:
* Literatura
* Matematicas
* Ciencias


Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Creación de un objeto que tiene por atributo un array.

Publicado por Javier (3 intervenciones) el 18/11/2015 18:06:11
Vaya, creo que no se podría haber explicado mejor. Muchísimas gracias por la respuestas, la verdad es que me ha quedado muy claro. 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
sin imagen de perfil

Creación de un objeto que tiene por atributo un array.

Publicado por Oscar (1 intervención) el 27/05/2018 03:17:31
Hola..!!

Estoy empezando tambien la programacion en Java y estoy atorado en esto de los arreglos...me gusto tu explicacion y quise probar tu codigo...lo copie integro como aparece aca pero al compilar Colegio.java en la consola de Windows me aparece que no puede encontrar el symbolo Class List en Class Colegio. No se si este error se deba a que estoy compilando directamente en la CMD de Windows...te dejo aca la imagen del error.

Saludos

Error
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
sin imagen de perfil
Val: 755
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Creación de un objeto que tiene por atributo un array.

Publicado por Yamil Bracho (2315 intervenciones) el 27/05/2018 03:21:47
Creo que falta import.java.util.*
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