Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/08/2008, 15:41
Avatar de Emel
Emel
 
Fecha de Ingreso: agosto-2008
Mensajes: 12
Antigüedad: 15 años, 8 meses
Puntos: 0
Error de NullPointerException

Holas! Hace unos dias puse una pregunta sobre un programa que estaba realizando y que no me salía la interficie gráfica pues bien dicho programa se basa en listas y nodos que poseen estas, tengo que hacer 2 implementaciones una con array y otra con punteros. La de punteros la tengo finiquitada pero la de arrays me está trayendo mil y un disgustos.

La interficie va genial pero el codigo base para trabajar con las listas de arrays me da errores. Concretamente un NullPointerException que nose como abarcar.

Paquete que crea la lista de referencias de clientes, el campo "cliente" es un puntero hacia un nodo del tipo "NodoListaClientes" que dentro tiene "nombre_cliente", "info_cliente" y una "lista de propiedades".


Código:
package arrays;

class NodoListaRefCliente{

	NodoListaClientes cliente;

	NodoListaRefCliente(NodoListaClientes cli){
		cliente=cli;
	}

        
}

class ListaRefClientes{
    
    NodoListaRefCliente[] refclientes = new NodoListaRefCliente[100];
     int PrimerNodo;
     int UltimoNodo;
    
    public int Fin_L_Ref_Clientes(){ 
        
        if (UltimoNodo==100){
        return UltimoNodo;
        }
        else{
            return UltimoNodo+1;

        }
        
    }

    public void Insertar_Ref_Cliente(NodoListaClientes cli, int Posicion){
        if (cli!=null){
     if (UltimoNodo==100){
         System.out.println("La lista está llena.");
     }
     else{
         if ((Posicion<=UltimoNodo)&(Posicion!=0)){
             NodoListaRefCliente aux,aux2;
             aux=refclientes[Posicion];
             NodoListaRefCliente nod=new NodoListaRefCliente(cli);
             refclientes[Posicion]=nod;
             for (int i=Posicion+1;i<=UltimoNodo+1;i++){
                 aux2=refclientes[i];
                 refclientes[i]=aux;
                 aux=aux2;
             }
             UltimoNodo++;  
         }
         else{
             if (Posicion!=0){
             if (Posicion<=100){
             System.out.println("La posición no existe, se insertará al final de la lista"); 
             if (UltimoNodo==0){
                 PrimerNodo=1;
             } 
             UltimoNodo++;
             NodoListaRefCliente aux=new NodoListaRefCliente(cli);
             refclientes[Posicion]=aux;
             }
             }
             else{
                 System.out.println("Error, la posición no existe.");
             }
         }
     }
        }
    }
}
Ahora el cacho que intento ejecutar: (Me compila genial pero me falla en la ejecución)

Código:
    public static void main(String[] args) throws Exception{

        ListaLocalidades LL  = new ListaLocalidades();
        ListaRefClientes LRC = new ListaRefClientes();
        Clientes LC = new Clientes();
        
        LL.Crear_L_Localidades();
        LRC.Crear_L_Ref_Clientes();
        LC.Crear_L_Clientes();
        
        LL.Insertar_Localidad("Palma", LL.Fin_L_Localidades());
        
        LRC=LL.R1(LL.Localiza_Localidad("Palma"));
        LC.Insertar_Cliente("Emilio","loquesea",LC.Fin_L_Clientes());
        int poscli=LC.Localiza_Cliente("Emilio");

        LRC.Insertar_Ref_Cliente(LC.clientes[poscli],LRC.Fin_L_Ref_Clientes());
        
        }
Notas:

· Los métodos crear solo ponen "PrimerNodo" y "UltimoNodo" igual a 0.

· R1 devuelve una lista de localidades pasandole un int que sea la posicion en la lista de localidades.

· Localiza_Cliente devuelve la posicion de un cliente con el nombre que se le indique, en este caso "Emilio".

Me da error de NullPointerException justamente en la siguiente linea:

LRC.Insertar_Ref_Cliente(LC.clientes[poscli],LRC.Fin_L_Ref_Clientes());

Pero por lo que se ese error me lo debe de dar porque "LC.clientes[poscli]" debe retornar algo "null", ¿no? Porque lo otro, el "LRC.Fin_L_Ref_Clientes()" devuelve tipo int y no tiene mucho sentido.

En cualquier caso, me estoy volviendo loco porque pensaba que tenía el programa viento en popa y me ha salido esto que no esperaba.

Mil gracias al que me ayude