Java - Ayuda como hacer un vector de objetos

 
Vista:
sin imagen de perfil

Ayuda como hacer un vector de objetos

Publicado por Eduardo (6 intervenciones) el 16/02/2014 00:03:31
Hola tengo una clase aluno que crea un objeto con nombre y matricula, ademas tengo una clase lista la cual debe de crear un vector de alumnos, según yo esta bien pero me sale el siguiente error.

1
2
3
4
5
6
--------------------Configuration: <Default>--------------------
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
	at Lista.Agregar(Lista.java:19)
	at escuelita.main(escuelita.java:8)
 
Process completed.

anexo mi codigo

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
46
47
48
import java.io.*;
class Alu
{
	private int mat,cfin,a,b;
	private String nom;
	private int faltas[]=new int[3];
	private int cal[]=new int[2];
 
	public Alu(int x)
	{
		mat=x;
		nom="sin nombre";
	}
	public Alu(int x, String y)
	{
		mat=x;
		nom=y;
	}
	public void setNom(String n){  nom=n;	}
	public String getNom()	{	return nom;	}
	public void setMat(int n){mat=n;	}
	public int getMat(){return mat;	}
	public void setCal(int x, int y){int a=x;int b=y;}
	public int getCal()	{	return cal[a]=b;}
	public void cFin(int x)	{	cfin=x;}
	public void setcFin(int x)	{	cfin=x;	}
	public int getcFin(){	return cfin;	}
	public float Promedio()
	{int prom=0;
		 prom=(cal[0]+cal[1])/2;
	System.out.println("Promedio: "+prom);
	return prom;
	}
	public int tFal()
	{int t;
		t=(faltas[0]+faltas[1]+faltas[2]);
		System.out.println("Faltas: "+t);
		return t;
	}
	public void imprimir()
	{
		System.out.println(nom+"	"+mat+" Final: "+cfin);
		tFal();
		Promedio();
	}
 
 
}

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
import java.io.*;
class Lista
{
	private String claveMat,nombre,prof;
	private Alu alumnos[];
	public Lista(String clave)
	{
		claveMat=clave;
		alumnos=new Alu[0];
	}
	public void Agregar(int x, String y)
	{   int n;
		Alu nuevo=new Alu(x,y);
 
		n=alumnos.length;
		Alu v[]=new Alu[n+1];
		nuevo.setMat(x);
		nuevo.setNom(y);
		v[n+1]=nuevo;
 
		alumnos=v;
 
	}
 
	public void imprimir()
	{
 
		int i;
		for(i=0;i<alumnos.length;i++)
			System.out.println(alumnos[i].getNom()+" "+alumnos[i].getMat() );
	}
}

1
2
3
4
5
6
7
8
9
10
11
12
import java.io.*;
public class escuelita
{
	public static void main(String mk[])
	{
		Lista gru=new Lista("10");
 
		gru.Agregar(11111,"JOSE");
		gru.imprimir();
 
	}
}

Saludos
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
sin imagen de perfil

Ayuda como hacer un vector de objetos

Publicado por Eduardo (6 intervenciones) el 16/02/2014 00:37:02
Sorry. ya quedo.

saludos
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
Imágen de perfil de Jorge

Ayuda como hacer un vector de objetos

Publicado por Jorge (6 intervenciones) el 16/02/2014 05:34:16
Amigo, dándole una primera mirada, veo muchos problemas de eficiencia y de estructura en tu código.

1. La excepción es por la línea alumnos=v. alumnos es una referencia a un arrays que no tiene dimensíón, y v es una referencia a un arrays de dimensión 1, por eso, aparece la excepción.

2. Cuándo hablo de problema de eficiencia lo digo por que tu código es muy redundante.
.Claramente tu array (alumnos) de tipo Alu va creciendo, esto es perfecto para colecciones como por ejemplo arraylist, y no para arrays, sin embargo, si insistes en trabajar con arrays, es solo, que crees un array nuevo de tipo Alu con una longitud de una unidad más grande, como lo intentabas hacer pero, ojo, después debes descargas los valores del arrays alumnos en el nuevo y agregar el nuevo dato y después vuelves y lo referencias con alumnos; y porque esto, porque no tiene sentido que el arrays alumnos sea un atributo específico de un objeto, sino mas bien, un atributo de la clase, osea que sea estático. La cuestión es esta, si van a a ver muchos alumnos, obviamente se crea un arrays en tu caso, pero, ¿para qué cada objeto de la clase Lista va a tener una copia del arrays alumnos, esto es un desperdicio de memoria, mejor es pues dejar una sola copia para todos los objetos de la clase Lista, osea que sea estático.

Si quieres me escribes a mi correo y te elaboro un código más eficiente
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