Java - Valor de retorno de un metodo get no esperado

   
Vista:

Valor de retorno de un metodo get no esperado

Publicado por Alejandro (3 intervenciones) el 02/03/2014 22:07:57
Tengo un pequeño problema, y mas que un problema es una consulta para aprender más sobre esto que me está pasado Solo dejaré código relevante, aún sí, si crees necesario publicar todo el código, hacermelo saber.

• Ejercicio:
Netbeans. Realizar un programa que solicite Agencia, Marca, Modelo, Precio, Mensualidad, Intereses y Pago Mensual para realizar un registro de ventas de una compañia de Automoviles. Haciendo el uso de Constructores, sustituyendo los metodos set

Hasta aquí es bastante obvio y simple lo que hay que hacer, pero mi problema es el siguiente:

Tengo dos clases, Vehiculo, y FrameVehiculo. de las cuales Vehiculo almacena todos los metodos para realizar cálculos como el Interes, ademá de tener los constructores de la clase misma. FrameVehiculo tiene toda la implementación de esos métodos y es donde se muestra la GUI (Interfaz Gráfica).

Clase Vehiculo
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
private float precio;
private float intereses;
private int interesesPorcentaje;
 
// Constructores ~
 
    public Vehiculo(){}
 
    public Vehiculo(float precio){
        this.precio = precio;
    }
 
    public Vehiculo(int mensualidad , float intereses){
        this.mensualidad = mensualidad;
        this.intereses = intereses;
    }
 
// Metodos GET ~
 
    public float getPrecio(){
        return precio;
    }
 
    public float getIntereses(){
        return intereses;
    }
 
    public float calcularIntereses(){
        return precio*interesesPorcentaje/100;
    }

Como dije antes solo ocupo código relevante aquí, para no hacer el tema tan largo. InteresesPorcentaje es el porcentaje de intereses que se aplicará (5 , 12 , 18 , 25 , 40 %) dependiendo las mensualidades. Para mejor referencia dejo este link con el código. http://codeviewer.org/view/code:3cee


ClaseFrame
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
Vehiculo camioneta[] = new Vehiculo[10];
int contadorRegistro = 0;
 
private float precio;
private float intereses;
private float interesPorcentaje;
 
// Acción para el boton Guardar
private void buttonGuardarActionPerformed(java.awt.event.ActionEvent evt) {
 
        int i = contadorRegistro;
        if (contadorRegistro == 10){
 
            JOptionPane.showMessageDialog(null , "Error, No se pueden realizar mas registros");
 
        } else {
 
            camioneta[i] = new Vehiculo();
 
            precio = Float.parseFloat(precioVehiculo.getText());
            interesPorcentaje = camioneta[i].getInteresesPorcentaje(mensualidad);
 
            camioneta[i] = new Vehiculo(precio);
            camioneta[i] = new Vehiculo(mensualidad , interesPorcentaje);
 
            interesesPorcentaje.setText(interesPorcentaje + "%");
            interesesVehiculo.setText("$" + camioneta[i].calcularIntereses() + "");
 
 
            contadorRegistro++;
        }
    }
 
    private javax.swing.JButton buttonGuardar;
    private javax.swing.JTextField interesesPorcentaje;
    private javax.swing.JTextField interesesVehiculo;
    private javax.swing.JTextField precioVehiculo;

Cómo se puede observar, declaré variables identicas a la clase vehiculo ya que de acuerdo a lo que he leido Java disingue entre variables de diferentes clases. por lo que precio de Vehiculo, no es lo mismo que precio de FrameVehiculo. En esta ultima clase lo he hecho así ya que de otra menra tendría que hacer:

1
2
camioneta[i] = new Vehiculo(Float.parseFloat(precioVehiculo.getText()));
camioneta[i] = new Vehiculo(mensualidad , camioneta[i].getInteresesPorcentaje(mensualidad));

Y esto de me hace poco semantico.


Enfrentando el problema:
Me disculpo por la larga introucción pero la creo necesaria para que se entienda bien esto. El problema es tan simple que hasta me da coraje no saber que es.

Cuando llamo al método calcularIntereses que se encuentra en la clase Vehiculo, el valor de retorno es 0, en vez del esperado. He intentado diversas formas.


Clase Vehiculo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 // 1
public float calcularIntereses(){
        return precio*interesesPorcentaje/100;
    }
 
// 2
public float calcularIntereses(){
        float calculo = precio*interesesPorcentaje/100;
        return calculo;
    }
 
// 3
public float calcularIntereses(){
        return getPrecio()*interesesPorcentaje/100;
    }
 
// 4
public float calcularIntereses(){
        return (getPrecio()*getInteresesPorcentaje())/100;
    }

Cabe mencionar que no he obtenido ningun error desde el IDE, ya que sintacticamente está correcto. Entonces, me di cuenta de que el valor de retorno 0, era debido al precio. Me di cuenta de esta manera:


Clase Vehiculo
1
2
3
4
5
6
7
8
public float calcularIntereses(){
        System.out.println(precio);
        System.out.println(getPrecio())
        System.out.println(InteresesPorcentaje);
        System.out.println(getInteresesProcentaje());
        System.out.println(precio*interesesPorcentaje/100);
        return precio*interesesPorcentaje/100;
    }

De las cuales, solo las "impresiones" en consola del IDE correctas fueron el InteresesesPorcentaje. En cambio el precio da un valor 0.


Lo curioso es que si llamo a los metodos por separado desde la clase Frame, solo getIntereses() me funciona de perlas, pero getPrecio(), no. Además hice una comprobación para ver que los valores se guardaran bien en precio.

Clase Vehiculo
1
2
3
4
5
6
7
8
9
10
11
public Vehiculo(float precio){
        this.precio = precio;
        System.out.println(this.precio);
    }
 
// Metodos GET ~
 
    public float getPrecio(){
        System.out.println(this.precio);
        return precio;
    }


En este caso solo la primera impresion, del Constructor es correcta, en el getPrecio no pasa esto, sino que es 0. Entonces ¿Por qué pasa esto? Si te tomaste el tiempo para leer mi tema, te lo agradezco demasiado, no me interesa tanto saber la solución, sino, mas bien, Saber el porque de esto.
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

Valor de retorno de un metodo get no esperado

Publicado por UnoPorAhi (128 intervenciones) el 02/03/2014 22:21:42
1
2
camioneta[i] = new Vehiculo(precio);
camioneta[i] = new Vehiculo(mensualidad , interesPorcentaje);


Esto está mal. No puedes llamar a dos constructores para un objeto. Solo puedes crear el objeto UNA vez llamando UNA vez al constructor.
Lo que estás haciendo es crear un vehículo y guardándolo en camioneta[i] y depués estás creando OTRO vehiculo (al que solo le pasas mensualidad e intereses) y estás machancando el valor de camioneta[i]

Create un solo constructor que admita los tres parámetros, o bien establece precio mediante un set.


Un saludo
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

Valor de retorno de un metodo get no esperado

Publicado por Alejandro (3 intervenciones) el 03/03/2014 00:08:40
¡Muchas gracias por tu respuesta!, me has ayudado a comprender mejor esto. Y gracias por tomarte el tiempo de leerlo.
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