1

Buenos días, el día de hoy estoy intentando de realizar un programa el cual consiste en introducir el nombre de los participantes de una carrera de atletismo, introducir su hora de salida y su hora de llegada.

Anteriormente en clase habiamos realizado un programa que tiene la Clase Tiempo, el cual nos dijo el profesor que debiamos de hacerla para poder sumar tiempo, y nos dijo que utilizaramos el constructor de esa clase para poder hacer el programa. Actualmente estoy tratandod e trabajar con 3 clases, las cuales son:

Corredores

public class Corredores {
private String nombre;
public Hora salida, llegada;

public Corredores(String nombre) {
    this.nombre = nombre;

}



public String toString() {
    return "La persona: " +nombre +" salio a las " +salida +" y llego a las " +llegada +
            " en su prueba de atletismo";
}
}

Atletismo

import java.util.Scanner;
public class Atletismo {
private static Corredores corredor [] = new Corredores[4];
private static Scanner entrada = new Scanner(System.in);
public static void main( String [] args) {
capturaDatos();
impresion();
}



public static void capturaDatos() {
    String nombre;
    int hora;
    int minuto;
    int segundo;

    for(int i=0; i<corredor.length; i++) {
        System.out.println("Introduzca el nombre del competidor");
        nombre = entrada.nextLine();
        System.out.println("Introduzca la hora de salida");
        hora = entrada.nextInt();
        System.out.println("Introduzca los minutos de salida");
        minuto = entrada.nextInt();
        System.out.println("Introduzca los segundos de salida");
        segundo = entrada.nextInt();

        corredor[i].salida = new Hora(hora,minuto,segundo);

        entrada.nextLine(); // Buffer

    }


}

public static void impresion() {
    for(int i=0; i<corredor.length; i++) {
        System.out.println(corredor[i].salida);
    }
}
}

Hora

public class Hora {
private int hr;
private int min;
private int seg;

public Hora(int hr, int min, int seg) {
    this.hr = hr;
    this.min = min;
    this.seg = seg;
}

public void setHr(int hr) {
    this.hr = hr;

}

public int getHr() {
    return this.hr;
}

public void setMin(int min) {
    this.min = min;
}

public int getMin() {
    return this.min;
}

public void setSeg(int seg) {
    this.seg = seg;
}

public int getSeg() {
    return this.seg;
}

public void incrementarH(int hr) {
 this.hr =this.hr + hr;
if(this.hr<=24) {
    this.hr = this.hr;
}else if(this.hr>24) {
    do {
    this.hr = this.hr - 24;
    }while(this.hr>24);
}

}

public void incrementarM(int min) {
    int contador=0;
    this.min = this.min+min;
    if(this.min<60) {
        this.min = this.min;
    }else
    if(this.min >=60) {
        do {
            this.min = this.min - 60;
            contador++;
        }while(this.min>=60);
        hr = hr + contador;

        if(hr>24) {
            do {
            hr = hr - 24;
            }while(hr>24);
        }
    }
}

public void incrementarS(int seg) {
int incrementarM=0, incrementarH=0;
this.seg = this.seg+seg;
if(this.seg<60) {
    this.seg = this.seg;
}else if(this.seg>= 60 && this.seg<3600) {
    do {
    this.seg = this.seg-60;
    incrementarM++;
    }while(this.seg>=60 && this.seg<3600);
    min = min+incrementarM;
    if(min>=60) {
        do {
        min = min-60;
        }while(min>=60);
    }
}else if(this.seg>3600) {
    while(this.seg>=3600) {
        this.seg = this.seg-3600;
        incrementarH++;
        if(this.seg>60) {
            do {
            this.seg = this.seg-60;
            incrementarM++;
            }while(this.seg>=60);
        }
    }
    hr = incrementarH + hr;
    min = min+incrementarM;
    if(hr>24) {
        do {
            hr = hr-24;
        }while(hr>24);
    }
    if(min>=60) {
        do {
            min = min-60;
        }while(min>=60);
    }

}

}

public String toString() {
    return hr +":" +min +":" +seg;
}

}

En resumen, mi error es:

Exception in thread "main" java.lang.NullPointerException at Atletismo.capturaDatos(Atletismo.java:28) at Atletismo.main(Atletismo.java:6)

y no se por que sale, intente hacerlo desde nuevo pero omitiendo todo menos el constructor de la clase Hora y sale lo mismo.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221

1 Answers1

6

El problema que tienes es que antes de tratar de acceder a la propiedad salida de corredor[i], deberás inicializar la instancia dentro del array. Fíjate en esta línea: corredor[i]= new Corredores(nombre);

for(int i=0; i<corredor.length; i++) {
    System.out.println("Introduzca el nombre del competidor");
    nombre = entrada.nextLine();
    System.out.println("Introduzca la hora de salida");
    hora = entrada.nextInt();
    System.out.println("Introduzca los minutos de salida");
    minuto = entrada.nextInt();
    System.out.println("Introduzca los segundos de salida");
    segundo = entrada.nextInt();

    corredor[i]= new Corredores(nombre);
    corredor[i].salida = new Hora(hora,minuto,segundo);

    entrada.nextLine(); // Buffer

}

Te recomiendo también que te pases por esta pregunta para posibles futuros errores de NullPointerException: ¿Cuál es la solución a todos los errores NullPointerException presentes, pasados y futuros?

Pikoh
  • 17,305
  • 9
  • 38
  • 54