0

Me sale este error, ayuda porfa, les dejare la clase donde sale el error

Exception in thread "main" java.lang.NullPointerException
    at Afiliado.anioAfiliado(Afiliado.java:106)
    at Afiliado.ValorFecha(Afiliado.java:93)
    at Afiliado.calculoInteres(Afiliado.java:26)
    at ProyectoFinal.prestamoPagoAfiliado(ProyectoFinal.java:384)
    at ProyectoFinal.main(ProyectoFinal.java:160)



public class Afiliado extends Persona implements Interes{ 

    private Afiliado [] beneficiario;
    private Fecha fechaAfiliacion;
    private double interes;
    private final int MAXBENEFICIARIO=3;
    private final int MAXPRESTAMOS=5;
    private Prestamo [] prestamos;
    private char tipoAfiliado;


    public Afiliado() {

    }

    public Afiliado(Fecha fechaAfiliacion, char tipoAfiliacion) {

    }

    public void calculoInteres() {


        if(getTipoAfiliado()=='c' || getTipoAfiliado()=='C') {

            interes=1.5-(0.5-ValorFecha());//aca sale error

        } 
        if(getTipoAfiliado()=='b' || getTipoAfiliado()=='B') {

            interes=1.5-(0.2-ValorFecha());

        } 

    }

    public Afiliado[] getBeneficiario() {
        return beneficiario;
    }

    public Fecha getFechaAfiliacion() {
        return fechaAfiliacion;
    }

    public double getInteres() {
        return interes;
    }


    public int getMAXBENEFICIARIO() {
        return MAXBENEFICIARIO;
    }

    public int getMAXPRESTAMOS() {
        return MAXPRESTAMOS;
    }

    public Prestamo[] getPrestamos() {
        return prestamos;
    }

    public char getTipoAfiliado() {

        return tipoAfiliado;
    }

    public void setBeneficiario(Afiliado[] beneficiario) {
        this.beneficiario = beneficiario;
    }

    public void setFechaAfiliacion(Fecha fechaAfiliacion) {
        this.fechaAfiliacion = fechaAfiliacion;
    }

    public void setInteres(double interes) {
        this.interes = interes;
    }

    public void setPrestamos(Prestamo[] prestamos) {
        this.prestamos = prestamos;
    }

    public void setTipoAfiliado(char tipoAfiliado) {
        this.tipoAfiliado = tipoAfiliado;
    }



    public double ValorFecha() {
        double valorFecha;


        valorFecha=anioAfiliado()*0.02; //aca sale error

        return valorFecha;
    }

    public  int anioAfiliado() {
        int anioAfiliado;
        int sw=0;



        Prestamo pres=new Prestamo();

        anioAfiliado=pres.getFechaPrestamo().getAnio()-getFechaAfiliacion().getAnio(); //aca sale error

        if(getFechaAfiliacion().getMes()<pres.getFechaPrestamo().getMes()) {
            if(getFechaAfiliacion().getDia()<pres.getFechaPrestamo().getDia()) {
                sw=1;
            }
        }

        if(sw==1) {
            return anioAfiliado;

        }else {
            return anioAfiliado=anioAfiliado-1;
        }


    }

}

La linea donde se errores están comentadas como "acá sale error"

Los últimos dos errores que salen es en la clase que contiene el main y también es relacionado con esa clase.

MZ39720
  • 47
  • 1
  • 1
  • 5

1 Answers1

0

Con respecto al apuntador nulo puedes hacer lo siguiente, te lo voy a explicar por el orden como se ejecutan tus metodos cuando llamas al metodo calculoInteres.

Primero lo que tienes que hacer cuando instancias un objeto Prestamo en el metodo anioAfiliado, el objeto Prestamo que instancias debe de recibir los argumentos necesarios en su constructor para asi poder requerirlos correctamente en el futuro. Asi puedes tener tu clase Prestamo.

public class Prestamo {
private LocalDate fechaPrestamo;

public Prestamo(LocalDate fechaPrestamo) {
    this.fechaPrestamo = fechaPrestamo;
}

public LocalDate getFechaPrestamo() {
    return fechaPrestamo;
}

public void setFechaPrestamo(LocalDate fechaPrestamo) {
    this.fechaPrestamo = fechaPrestamo;
}

Tambien podrias dejar la clase Fecha asi.

public class Fecha {
private LocalDate date;

public Fecha(LocalDate date) {
    this.date = date;
}

public LocalDate getDate() {
    return date;
}

public void setDate(LocalDate date) {
    this.date = date;
}

}

-El metodo anioAfiliado debe tener como parametro fechaPrestamo de tipo LocalDate, pues lo vas a necesitar para instanciar la clase Prestamo.

Quedaria asi.

 public  int anioAfiliado(LocalDate fechaPrestamo) {
    int anioAfiliado;
    int sw=0;

    Prestamo pres = new Prestamo(fechaPrestamo);

    anioAfiliado = pres.getFechaPrestamo().getYear() -  getFechaAfiliacion().getDate().getYear();
     //Si la fecha de afiliacion es menor a la fecha del prestamo
    if(getFechaAfiliacion().getDate().isBefore(pres.getFechaPrestamo())){
            sw=1;
    }

    if(sw == 1) {
        return anioAfiliado;

    }else {
        return anioAfiliado=anioAfiliado-1;
    }
}

Cuando cambias la clase anioAfiliado, El metodo calculoInteres requiere tambien que le ingrese la fechaPrestamos como parametro del metodo. Este metodo quedaria.

public void calculoInteres(LocalDate fechaPrestamo) {


    if(getTipoAfiliado()=='c' || getTipoAfiliado()=='C') {

        interes=1.5-(0.5-ValorFecha(fechaPrestamo));

    } 
    if(getTipoAfiliado()=='b' || getTipoAfiliado()=='B') {

        interes=1.5-(0.2-ValorFecha(fechaPrestamo));

    } 

}

Ya solo resta ejecutar el main.

public static void main(String[] args) {
    Afiliado afiliado = new Afiliado(new Fecha(LocalDate.of(2018,1, 1)), 'c');
    afiliado.calculoInteres(LocalDate.of(2018, 8, 16));
    System.out.println("Interes: " + afiliado.getInteres());
}

Espero haberte ayudado, con tu problema.