Java - Porque peta el programa

 
Vista:

Porque peta el programa

Publicado por carlos (25 intervenciones) el 27/11/2018 16:19:05
Os cuento tengo que hacer un plazo fijo una cantidad una fecha un interes y una duracion con recursividad
tengo qeu crear una clase fecha con la fecha de creacion otra de tipo plazo fijo y el main os o paso y os digo el error que me da al probarlo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
public class Fecha {
 
    private int mes;
    private int año;
 
    public int getMes() {
        return mes;
    }
 
    public int getAño() {
        return año;
    }
 
    public void setMes(int mes) {
        if (mes > 12) {
            this.mes = mes % 12;
        }
        this.mes = mes;
    }
 
    public void setAño(int año) {
        if (mes > 12) {
            this.año = mes / 12 + año;
        }
        this.año = año;
    }
 
}
 
 
public class PlazoFijo {
 
    private double cantidad;
    private double interes;
    private Fecha fechaCreacion;
    private int tiempo;
 
    public void setCantidad(double cantidad) {
        this.cantidad = cantidad;
    }
 
    public void setInteres(double interes) {
        this.interes = interes;
    }
 
    public void setFechaCreacion(Fecha fechaCreacion) {
        this.fechaCreacion = fechaCreacion;
    }
 
    public void setTiempo(int tiempo) {
        this.tiempo = tiempo;
    }
 
    public double getCantidad() {
        return cantidad;
    }
 
    public double getInteres() {
        return interes;
    }
 
    public Fecha getFechaCreacion() {
        return fechaCreacion;
    }
 
    public int getTiempo() {
        return tiempo;
    }
 
    public PlazoFijo() {
        cantidad = 0;
        interes = 0;
        fechaCreacion = null;
        tiempo = 0;
    }
 
    public PlazoFijo(double cantidad, double interes, Fecha fechaCreacion, int tiempo) {
        this.cantidad = cantidad;
        this.interes = interes;
        this.fechaCreacion = fechaCreacion;
        this.tiempo = tiempo;
    }
 
    public int mesesParaVencimiento() {
        Date d = new Date();
        int tiempoConsumido = (1 + d.getMonth() + d.getYear() * 12) - (fechaCreacion.getMes() + fechaCreacion.getAño() * 12);
        /* la fecha de hoy en meses + 1 porque java empieza a contar los meses
        en 0 menos la fecha de la creacion todo en meses nos da el nº de meses consumidos,
        hacerlo de esta forma nos ahorra meter condicionales por si al restar los meses
        sale negativo*/
        int mesesParaVencimiento = tiempo - tiempoConsumido;
        return mesesParaVencimiento;
    }
 
}
 
 
   public static void main(String[] args) {
        Fecha d1 = new Fecha(02,2018);
        PlazoFijo p = new PlazoFijo();
        p.setCantidad(24);
        p.setTiempo(25);
        p.setInteres(5);
        p.setFechaCreacion(d1);
        if (p.mesesParaVencimiento() > 0) {
            System.out.println("Meses para vencimiento: " + p.mesesParaVencimiento());
        } else {
            System.out.println("EL plazo ya ha vencido");
        }
    }
}

No me da ningun error de programacion pero al probarlome dice
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: ej1tarea.Fecha
at ej1tarea.Ej1Tarea.main(Ej1Tarea.java:20)
C:\Users\ck\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Porque peta el programa

Publicado por Billy Joel (876 intervenciones) el 27/11/2018 16:39:35
He copiado tu código y veo que tienes 2 clases Fecha y PlazoFijo.
Copiando y pegando tu código el método main está fuera de las dos clases, deberías meterlo dentro de alguna clase.
Para que funcionara lo he metido dentro de la clase PlazoFijo y me marca un error al crear el objeto de la clase Fecha
1
Fecha d1 = new Fecha(02, 2018);
Y la razón es que la clase Fecha no tiene definidos un constructor que soporte los dos enteros que le envías como parámetros.

Espero haberte ayudado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Porque peta el programa

Publicado por carlos (25 intervenciones) el 27/11/2018 16:41:13
ya tengo creado lso constructores de la clase Fecha ahora como hago lo del main? no vale el main que tengo de base que use para crear las clases?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Porque peta el programa

Publicado por Billy Joel (876 intervenciones) el 27/11/2018 16:51:37
El método main no es mas otro método que le indica a Java por donde empezar, dicho esto entonces el método main lo metes en la clase que quieras.

Otra cosa las clases separalas por archivo. Por ejemplo la clase Fecha la metes en un archivo Fecha,java y la clase PlazoFijo la metes en otro archivo PlazoFijo.java
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Porque peta el programa

Publicado por carlos (25 intervenciones) el 27/11/2018 17:11:39
a ver yo tengo 3 archivo uno el main basico que creas al princpio otro clase fecha y otro clase plazo fijo
pero me da ese error que te digo asi tengo los codgio de clase fecha ahora
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class Fecha {
 
    private int mes;
    private int año;
 
    public int getMes() {
        return mes;
    }
 
    public int getAño() {
        return año;
    }
 
    public void setMes(int mes) {
        if (mes > 12) {
            this.mes = mes % 12;
        }
        this.mes = mes;
    }
 
    public void setAño(int año) {
        if (mes > 12) {
            this.año = mes / 12 + año;
        }
        this.año = año;
    }
 
    public Fecha(int mes, int año) {
        this.mes = mes;
        this.año = año;
    }
    public Fecha(){
        mes = 0;
        año = 0;
    }
}
y este es el main

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Ej1Tarea {
 
     /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Fecha d1 = new Fecha(02,2018);
        PlazoFijo p = new PlazoFijo();
        p.setCantidad(24);
        p.setTiempo(25);
        p.setInteres(5);
        p.setFechaCreacion(d1);
        if (p.mesesParaVencimiento() > 0) {
            System.out.println("Meses para vencimiento: " + p.mesesParaVencimiento());
        } else {
            System.out.println("EL plazo ya ha vencido");
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Porque peta el programa

Publicado por Billy Joel (876 intervenciones) el 27/11/2018 17:32:24
Clase PlazoFijo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import java.util.Date;
 
public class PlazoFijo {
 
    private double cantidad;
    private double interes;
    private Fecha fechaCreacion;
    private int tiempo;
 
    public void setCantidad(double cantidad) {
        this.cantidad = cantidad;
    }
 
    public void setInteres(double interes) {
        this.interes = interes;
    }
 
    public void setFechaCreacion(Fecha fechaCreacion) {
        this.fechaCreacion = fechaCreacion;
    }
 
    public void setTiempo(int tiempo) {
        this.tiempo = tiempo;
    }
 
    public double getCantidad() {
        return cantidad;
    }
 
    public double getInteres() {
        return interes;
    }
 
    public Fecha getFechaCreacion() {
        return fechaCreacion;
    }
 
    public int getTiempo() {
        return tiempo;
    }
 
    public PlazoFijo() {
        cantidad = 0;
        interes = 0;
        fechaCreacion = null;
        tiempo = 0;
    }
 
    public PlazoFijo(double cantidad, double interes, Fecha fechaCreacion, int tiempo) {
        this.cantidad = cantidad;
        this.interes = interes;
        this.fechaCreacion = fechaCreacion;
        this.tiempo = tiempo;
    }
 
    public int mesesParaVencimiento() {
        Date d = new Date();
        int tiempoConsumido = (1 + d.getMonth() + d.getYear() * 12) - (fechaCreacion.getMes() + fechaCreacion.getAño() * 12);
        /* la fecha de hoy en meses + 1 porque java empieza a contar los meses
           en 0 menos la fecha de la creacion todo en meses nos da el nº de meses consumidos,
           hacerlo de esta forma nos ahorra meter condicionales por si al restar los meses
           sale negativo*/
        int mesesParaVencimiento = tiempo - tiempoConsumido;
        return mesesParaVencimiento;
    }
 
}

Clase Fecha:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class Fecha {
 
    private int mes;
    private int año;
 
    public int getMes() {
        return mes;
    }
 
    public int getAño() {
        return año;
    }
 
    public void setMes(int mes) {
        if (mes > 12) {
            this.mes = mes % 12;
        }
        this.mes = mes;
    }
 
    public void setAño(int año) {
        if (mes > 12) {
            this.año = mes / 12 + año;
        }
        this.año = año;
    }
 
    public Fecha(int mes, int año) {
        this.mes = mes;
        this.año = año;
    }
 
    public Fecha() {
        mes = 0;
        año = 0;
    }
}

Clase Ej1Tarea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Ej1Tarea {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Fecha d1 = new Fecha(02, 2018);
        PlazoFijo p = new PlazoFijo();
        p.setCantidad(24);
        p.setTiempo(25);
        p.setInteres(5);
        p.setFechaCreacion(d1);
        if (p.mesesParaVencimiento() > 0) {
            System.out.println("Meses para vencimiento: " + p.mesesParaVencimiento());
        } else {
            System.out.println("EL plazo ya ha vencido");
        }
    }
}

Cuando lo ejecuto me sale esto:
1
Meses para vencimiento: 22816

No se si eso es correcto, me podrías decir que es lo que quieres que haga a ver?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Porque peta el programa

Publicado por carlos (25 intervenciones) el 27/11/2018 17:44:15
a ver tiene que msotrar el tiempo que queda para el vencimineto del plazo
si le dado 25 meses de duracion y la fecha de creacion es febrero de 2018
debe acabar en marzo de 2020 y como estamos en noviembre de 2018 pues queda hasta el vencimineto 16 meses en teoria

en meses para vencimineto prueba esto
1
2
3
4
5
6
7
8
public int mesesParaVencimiento() {
        Date d = new Date();
        int tiempoConsumido = (1 + d.getMonth() + 2000 + d.getYear()/100 * 12) - (fechaCreacion.getMes() + fechaCreacion.getAño() * 12);
        /* la fecha de hoy en meses + 1 porque java empieza a contar los meses
        en 0 ademas sumamos 2000 y partimos de 100 el getyear porque java
        empoeza a contar los años desde 1900*/
        int mesesParaVencimiento = tiempo - tiempoConsumido;
        return mesesParaVencimiento;

como has echo para que te imprima a mi no me imprime que has modificado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar