Problema java nivel básico[Listas]

QuitCat

Estoy con una practica , y me esta saliendo un error que debe ser por que estoy cometiendo alguna barbaridad supongo, a ver si me deciis donde y el que , que espero no tener todo mal.
El error me esta dando en las ultimas lineas , mas en concreto en : act.sig=new NodoAgenda(p,null);
Os pongo un trozo del codigo.

package Agenda;
class NodoAgenda {
	
Persona info;
NodoAgenda sig;
NodoAgenda (Persona p, NodoAgenda siguiente) {
	info = p;
	sig = siguiente;
}
}
public class Agenda {
	private NodoAgenda inicio;
	private int numPersonas;
	public Agenda ( ) {
		inicio = null;
		numPersonas = 0;
	}
	
public boolean aniadirPersona(Persona p) throws IOException{
	NodoAgenda act,ant;
	act=inicio;
	ant=act;
	boolean encontrado=false,aux=false;
	String dato,apenom;
	dato=p.obtenerApellidos()+" "+p.obtenerNombre();
	while(act!=null && !encontrado)
	{
		ant=act;
		act=act.sig;
		apenom=act.info.obtenerApellidos()+" "+act.info.obtenerNombre();
		//Si ya esta ese apellidonombre , encontrado=true para salir del while.
		if (apenom==dato)encontrado=true;
		//Si ha encontrado el sitio , o ha llegado al final de la lista, inserta
		if(dato.compareTo(apenom)<0)
		{
			ant.sig=new NodoAgenda(p,act);
			numPersonas++;
			encontrado=aux=true;
		}
	}
	/*Si sale del while y !encontrado, ha llegado a fin de lista sin insertar,
	con lo cual , insertamos P*/
	if(!encontrado)	
	{
		[b]act.sig=new NodoAgenda(p,null);[/b]
		numPersonas++;
		aux=true;
	}
	return aux;
}
Error
BLZKZ

ponlo con [ code] [ /code] el codigo, luego edito

CCiRviNe

Creo que es por que al iniciar la Agenda haces que el nodo apunte a null (inicio = null) y lo que tendrias que hacer es un nodo vacio
inicio = new NodoAgenda(null, null)

Thanat0s

No le hagas caso a Irvine que es gay.

Básicamente lo que te pasa es que pones inicio = null, entonces en la línea que te da el error estás intentando acceder al campo .sig de algo que es null, ya que pones act = ant = inicio = null.

Ese es el problema, la solución no es inmediata, tienes que tener en cuenta todos los casos que se pueden dar que en principio serían algo así como:

  • La lista está vacía (tienes que tratar todo de forma especial y dejarlo preparado para luego insertar más cosas).
  • Insertas al final de la lista (tienes que tener cuidado con el null del final de la lista).
  • Insertas al principio de la lista (tienes que tener cuidado de no perder la referencia al primer elemento).
  • Insertas en medio de la lista (este más o menos lo tienes contemplado en el código que has puesto)

Saludos, si ves que necesitas más ayuda avisa y te busco código que tengo hecho.

Edit: se me olvidó comentarte una cosa ayer, inicializar inicio = null no está mal, es decir, al principio vas a tener act = ant = null.
Lo único que tienes que tratar de forma especial ese caso, como dije ayer :P

Usuarios habituales

  • Thanat0s
  • CCiRviNe
  • BLZKZ
  • QuitCat