0

No entiendo el por que de este este error, si que es cierto que debes inicializar el array pero aun asi me sigue saltando el mismo error.

class Kata  
{

double contador[];

public double[] averages(int[] numbers) {


for(int i=0;i<numbers.length;i++) {
contador[i]=(double) ((numbers[i]+numbers[i+1])/2);
    System.out.println(contador[i]);
}
return new double[0];
}
}

Aqui esta el main

public class problema {

public static void main(String[] args) {
    Kata obj = new Kata();  
    System.out.println(obj.averages(new int[]{ 2, 2, 2, 2, 2 }));
}

}

El reporte

Exception in thread "main" java.lang.NullPointerException
at entrenamiento.Kata.averages(codewars.java:60)
at entrenamiento.problema.main(codewars.java:11)
J.newbie
  • 69
  • 6

1 Answers1

3

El problema es que contador no es inicializado en ningún momento. Tendrías entonces que calcular el tamaño de numbers para inicializar contador con ese tamaño, algo así:

    int nLength=numbers.length;
    this.contador= new double[nLength];

Luego esta parte del código:

contador[i]=(double) ((numbers[i]+numbers[i+1])/2);

Te dará un Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException, porque al aumentar el índice a uno dentro del bucle: numbers[i+1], llega un momento en que te sales de los límites del mismo índice.

Escrito así el método funcionaría:

public double[] averages(int[] numbers) {
    int nLength=numbers.length;
    contador= new double[nLength];
    for(int i=0;i<nLength;i++) {
        contador[i]=(double) ((numbers[i])/2);
        System.out.println(contador[i]);
    }
    return contador;
}

Salida:

1.0
1.0
1.0
1.0
1.0

En cuanto a esta línea contador[i]=(double) ((numbers[i]+numbers[i+1])/2);, debes aclararte sobre qué es lo que quieres calcular ahí realmente.

Otra cosa extraña es que retornes un new double[0]; desde tu método.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221
  • Muchas gracias , ahora si que funciona, respecto al valor de retorno `new double[0]` es por que esta clase que estoy haciendo para resolver un problema de la web 'codewars' y el metodo ya te viene con ese return. – J.newbie Apr 07 '19 at 20:25