Foro de elhacker.net

Programación => Java => Mensaje iniciado por: overxfl0w13 en 19 Octubre 2012, 16:38 pm



Título: No encuentro el fallo.
Publicado por: overxfl0w13 en 19 Octubre 2012, 16:38 pm
Buenas compañeros, el code es el siguiente:

Código
  1. import java.util.*;
  2. public class array0301
  3. {
  4.    private double[] alturaAlumnos;
  5.    private double alturaMedia;
  6.    private int indexArray;
  7.    private Scanner entradaTeclado;
  8.  
  9.    public array0301()
  10.    {
  11.        this.alturaMedia = 0;
  12.        this.indexArray = 0;
  13.        this.entradaTeclado = new Scanner(System.in);
  14.    }
  15.  
  16.    public void setAlturas()
  17.    {
  18.        while(entradaTeclado.hasNext())
  19.        {
  20.            if(entradaTeclado.hasNextDouble())
  21.            {
  22.                alturaAlumnos[indexArray] = entradaTeclado.nextDouble();
  23.                indexArray += 1;
  24.            }
  25.        }
  26.    }  
  27.    public void getAlturas()
  28.    {
  29.        indexArray = 0;
  30.        while(indexArray <= alturaAlumnos.length)
  31.        {
  32.            alturaMedia = alturaMedia + alturaAlumnos[indexArray];
  33.            indexArray += 1;
  34.        }
  35.        System.out.format("La altura media de %d alumnos es de %.3f metros",alturaAlumnos.length,(alturaMedia / alturaAlumnos.length));
  36.    }    
  37.    public static void main(String args[])
  38.    {
  39.        array0301 p1 = new array0301();
  40.        p1.setAlturas();
  41.        p1.getAlturas();
  42.    }    
  43. }

El error que lanza es NullPointerException en las lineas 22 y 40 y no consigo saber por qué se produce.

Un saludo


Título: Re: No encuentro el fallo.
Publicado por: 1mpuls0 en 20 Octubre 2012, 00:15 am
Error de capa 8 :P

NullPointerException  es ocasionado porque tratas de ingresar a un indice que no existe en el arreglo.

Saludos.


Título: Re: No encuentro el fallo.
Publicado por: overxfl0w13 en 20 Octubre 2012, 00:49 am
Error de capa 8 :P

NullPointerException  es ocasionado porque tratas de ingresar a un indice que no existe en el arreglo.

Saludos.

Jaja si error mio sé que es, pero no entiendo porque no existe el índice si la variable alturaAlumnos la declaro como un array de tamaño indefinido y en la pedida de datos le señalo el índice con la variable indexArray que tiene valor 0 en la primera vuelta del bucle.

Saludos y gracias Darhius :)

PD: Ya está, he probado a definir un tamaño en la definición del array, así si funciona.

Codigo nuevo:

Código
  1. import java.util.*;
  2. public class array0301
  3. {
  4.    private double[] alturaAlumnos;
  5.    private double alturaMedia,alturaCero;
  6.    private int indexArray,contadorEntradas;
  7.    private Scanner entradaTeclado;
  8.  
  9.    public array0301()
  10.    {
  11.        this.contadorEntradas = 0;
  12.        this.alturaCero = 0;
  13.        this.alturaAlumnos = new double[1000];
  14.        this.alturaMedia = 0;
  15.        this.indexArray = 0;
  16.        this.entradaTeclado = new Scanner(System.in).useLocale(Locale.US);
  17.    }
  18.  
  19.    public void setAlturas()
  20.    {
  21.        while(entradaTeclado.hasNext())
  22.        {
  23.            if(entradaTeclado.hasNextDouble())
  24.            {
  25.                alturaAlumnos[indexArray] = entradaTeclado.nextDouble();
  26.                indexArray += 1;
  27.                contadorEntradas += 1;
  28.            }
  29.            else break;
  30.        }  
  31.  
  32.    }  
  33.    public void getAlturas()
  34.    {
  35.        indexArray = 0;
  36.        if(contadorEntradas == 0)
  37.        {
  38.            System.out.format(Locale.US,"La altura media de %d alumnos es de %.3f metros.",contadorEntradas,alturaCero);
  39.        }
  40.        else
  41.        {
  42.            while(indexArray <= contadorEntradas)
  43.            {
  44.                alturaMedia = alturaMedia + alturaAlumnos[indexArray];
  45.                indexArray += 1;
  46.            }    
  47.            System.out.format(Locale.US,"La altura media de %d alumnos es de %.3f metros.",contadorEntradas,(alturaMedia / contadorEntradas));
  48.        }
  49.    }    
  50.    public static void main(String args[])
  51.    {
  52.        array0301 p1 = new array0301();
  53.        p1.setAlturas();
  54.        p1.getAlturas();
  55.    }    
  56. }
  57.  


Título: Re: No encuentro el fallo.
Publicado por: Gallu en 21 Octubre 2012, 23:03 pm
En realidad el NullPointerException te daba por que definías la referencia al objeto pero no lo creabas , por lo tanto la referencia era nula , no hace falta que inicialices el array en el constructor , igual te interesa inicializarlo en otro punto, lo que siempre debes tener en cuenta es que antes de usarlo , debes asegurarte de que has creado el objeto, que no estás usando una referencia nula.


Saludos