arrays de objetos

jwaldo
14 de Diciembre del 2004
Me gustaria q me ayudarais. Quisisera realizar una sencilla base de datos con varios campos y guardar en cada uno de los objetos estos campos.Envio codigo incompleto.Muchas gracias.

class Alumno
{

private String nombre="";
private String apellidos="";
private int edad;
private char grupo='H';
private Alumno[] alumnos;
private int numAlumnos=0;


/*String linea;
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader teclado = new BufferedReader (isr);*/

Alumno()
{
nombre="";
apellidos="";
edad=0;
grupo='H';
alumnos=new Alumno[5];
}


public Alumno introducir()
{
System.out.println("NumAlumnos= "+numAlumnos);
alumnos[numAlumnos].nombre="JUAN";
System.out.println(alumnos[0].nombre);
alumnos[numAlumnos].apellidos="GARCIA";
alumnos[numAlumnos].edad=0;
alumnos[numAlumnos].grupo='H';
numAlumnos++;
System.out.println("NumAlumnos= "+numAlumnos);
return alumnos[numAlumnos-1];
}


public boolean estaLleno()
{
System.out.println(numAlumnos);
System.out.println(alumnos.length);
return numAlumnos==alumnos.length;
}


public void añadir(Alumno alumno) throws Exception
{
if(estaLleno())
throw new Exception("Aula llena.Imposible añadir.");
// se busca la posición donde debe ir.

int i=0;

while((i<numAlumnos)&&(alumno.apellidos.compareTo(alumnos[i].apellidos)<0))
{
i++;//comprobar el siguiente.
}

for(int j=numAlumnos;j>i;j--)
{
alumnos[j+1]=alumnos[j];
}
alumnos[i]=alumno;
numAlumnos++;

}

public int busquedaBinaria(Alumno alumno)
{
int inicio=0;
int fin=numAlumnos-1;
int medio;

while(inicio<=fin)
{
medio=(inicio+fin)/2;
int comp=alumnos[medio].apellidos.compareTo(alumno.apellidos);
if(comp<0)
inicio=medio+1;
else if(comp>0)
fin=medio-1;
else return medio;
}
return -1;
}


public static void main(String args[])
{
boolean paso;
do
{
paso=true;
try
{
//Alumno alum[]=new Alumno();
Alumno alum=new Alumno();
alum=alum.introducir();// en este metodo siempre lanza la excepcion NullPointerException
alum.añadir(alum);
}

catch(NullPointerException ex)
{
System.out.println("El objeto es NULL");
}
catch(Exception ex)
{
System.out.println("El Almacen está lleno o el elemento no se encuentra en el almacen");
// paso=false;
}
}while(paso==false);
}
}


eth0
14 de Diciembre del 2004
alumnos=new Alumno[5];

Esta llamada inicializa un array de 5 elementos VACIOS.

alumnos[numAlumnos].nombre="JUAN";

Esta línea es la que genera el error. En ese punto, el elemento es null porque lo tienes que inicializar antes. Tienes que añadir antes de esa línea lo siguiente:

alumnos[numAlumnos] = new Alumno();

De todas formas, por más que miro el código no le encuentro sentido.

¿Por qué cada objeto Alumno tiene un array de 5 objetos Alumno?

¿Por qué, en el método main, alum se añade a sí mismo?

jwaldo
14 de Diciembre del 2004
Hola soy yo otra vez. He probado la linea q m pusiste antes de la linea de error en el metodo introducir, y sigue saltando la excepcion NullPointer... No lo entiendo. De todas maneras me gustaria plantear el problema correctamente a ver como podria hacerlo. Muchas gracias.

jwaldo
14 de Diciembre del 2004
Muchas gracias por la respuesta. La verdad es q mi idea era hacer una sencilla base de datos donde poder introducir el campo nombre y el campo edad y ya esta. Y todo ello guardarlo en un array.Si pudireras echarme una mano sobre como plantear el problema te lo agradeceria. También quisiera hacer lo mismo con la clase Vector pero no tengo mucha idea de como hacerlo.Gracias.