Foros del Web » Programación para mayores de 30 ;) » Java »

Problema de codigo

Estas en el tema de Problema de codigo en el foro de Java en Foros del Web. Hola este es mi problema El programa principal, escrito en una clase aparte, debe hacer: • Leer de teclado el nombre del país (un String), ...
  #1 (permalink)  
Antiguo 14/11/2014, 10:30
 
Fecha de Ingreso: octubre-2014
Mensajes: 46
Antigüedad: 9 años, 6 meses
Puntos: 0
Problema de codigo

Hola este es mi problema

El programa principal, escrito en una clase aparte, debe hacer:
• Leer de teclado el nombre del país (un String), el PIB de los años 2013
a 2009 (5 enteros) y la variación interanual de 2009 (un número real)

Crear 5 objetos de la clase DatosPIB, uno para cada año de 2009 a
2013
- para los años que no sean 2009 la variación del PIB se calcula como (PIB
del año actual - PIB del año anterior) * 100 / (PIB del año anterior)

• Mostrar en una ventana de la clase Escritura los cinco valores de
la variación del PIB obtenidos de los 5 objetos;

Este es mi codigo

Código Java:
Ver original
  1. import fundamentos.*;
  2. /**
  3.  * Write a description of class Subnormal here.
  4.  *
  5.  * @author Sergio
  6.  * @version (a version number or a date)
  7.  */
  8. public class EvolucionPIB
  9. {
  10.      public static void main(String[] args)
  11.       {
  12.          Lectura lec= new Lectura ("DatosPIB");
  13.          
  14.          String Nombre;
  15.          int Pib2013;
  16.          int Pib2012;
  17.          int Pib2011;
  18.          int Pib2010;
  19.          int Pib2009;
  20.          double variacionInteranual;
  21.          
  22.          lec.creaEntrada("Introduce el nombre del pais","España");
  23.          lec.creaEntrada("PIB 2009",1046894);
  24.          lec.creaEntrada("PIB 2010",1045620);  
  25.          lec.creaEntrada("PIB 2011",1046327);    
  26.          lec.creaEntrada("PIB 2012",1029002);    
  27.          lec.creaEntrada("PIB 2013",1022988);
  28.          lec.creaEntrada("Variacion Interanual 2009", -3.8);
  29.  
  30.          lec.esperaYCierra("Completa los datos");
  31.          
  32.          Nombre=lec.leeString ("Introduce el nombre del pais");
  33.          Pib2009=lec.leeInt("PIB 2009");
  34.          Pib2010=lec.leeInt("PIB 2010");
  35.          Pib2011=lec.leeInt("PIB 2011");
  36.          Pib2012=lec.leeInt("PIB 2012");
  37.          Pib2013=lec.leeInt("PIB 2013");
  38.          variacionInteranual=lec.leeDouble("Variacion Interanual 2009");
  39.          
  40.          DatosPIB DatosPib2009=new DatosPIB(Nombre,Pib2009,variacionInteranual,2009);
  41.          DatosPIB DatosPib2010=new DatosPIB(Nombre,Pib2010,(((Pib2010-Pib2009)*100)/Pib2009),2010);
  42.          DatosPIB DatosPib2011=new DatosPIB(Nombre,Pib2011,(((Pib2011-Pib2010)*100)/Pib2010),2011);
  43.          DatosPIB DatosPib2012=new DatosPIB(Nombre,Pib2012,(((Pib2012-Pib2011)*100)/Pib2011),2012);
  44.          DatosPIB DatosPib2013=new DatosPIB(Nombre,Pib2013,(((Pib2013-Pib2012)*100)/Pib2012),2013);
  45.          
  46.                                        
  47.          Escritura esc = new Escritura ("Calculo de las variaciones");
  48.          esc.insertaValor("Variacion Interanual 2009",variacionInteranual);
  49.          esc.insertaValor("Variacion Interanual 2010",DatosPib2009.variacion());
  50.          esc.insertaValor("Variacion Interanual 2011",DatosPib2010.variacion());
  51.          esc.insertaValor("Variacion Interanual 2012",DatosPib2011.variacion());
  52.          esc.insertaValor("Variacion Interanual 2013",variacion2013());
  53.          esc.espera();
  54.          System.exit(0);
  55.    }
=




este es el codigo de la clase DatosPIB que me dan hecha ya:

Código Java:
Ver original
  1. /**
  2.  * Clase para guardar informacion del PIB anual de un pais
  3.  */
  4. public class DatosPIB {
  5.  
  6.     private String pais;
  7.     private int pib; // Millones de euros
  8.     private double variacion; // En %
  9.     private int fecha; // Anyo
  10.  
  11.     /**
  12.      * Constructor que recibe el nombre del pais, el PIB (en millones de
  13.      * euros), su variaciacion interanual (en %) y el anyo al que
  14.      * corresponden los datos
  15.      *
  16.      * @param pais  Nombre del pais
  17.      * @param pib   Producto Interior Bruto, en millones de euros
  18.      * @param variacion Variacion interanual del PIB, en %
  19.      * @param fecha Anyo al que corresponden los datos
  20.      */
  21.     public DatosPIB(String pais, int pib, double variacion, int fecha) {
  22.         this.pais=pais;
  23.         this.pib = pib;
  24.         this.variacion = variacion;
  25.         this.fecha = fecha;
  26.     }
  27.  
  28.     /**
  29.      * Metodo observador del nombre del pais
  30.      */
  31.     public String pais() {
  32.         return pais;
  33.     }
  34.  
  35.     /**
  36.      * Metodo observador del valor del PIB
  37.      *
  38.      * @return     Producto Interior Bruto, en millones de euros
  39.      */
  40.     public int pib() {
  41.         return pib;
  42.     }
  43.  
  44.     /**
  45.      * Metodo observador de la tasa de variacion interanual del PIB
  46.      *
  47.      * @return     variacion interanual del PIB, en %
  48.      */
  49.     public double variacion() {
  50.         return variacion;
  51.     }
  52.  
  53.     /**
  54.      * Metodo que retorna el anyo al que corresponden los datos
  55.      * que guarda el objeto sobre el que se aplica
  56.      *
  57.      * @return     anyo al que corresponden los datos
  58.      */
  59.     public double fecha() {
  60.         return fecha;
  61.     }
  62. }


El problema es que mi codigo realiza mal las operaciones, muestra una pantalla para introducir los datos (he puesto el codigo con los datos ya puestos como podeis ver), despues te muestra otra pantalla en la que los resultados estan casi bien, el primer digito 0. o 1. está bien el problema esta en el segundo numero, mi codigo devuelve siempre 0.0 o 1.0 y debería devolver valores como (-0.6 en 2013, o 0.1 en 2011)

gracias
  #2 (permalink)  
Antiguo 14/11/2014, 12:26
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema de codigo

Buenas,

El problema es que estás utilizando enteros en la operación y por lo tanto redondea la cifra. Debes forzar que la operacion sea de tipo double, para ello basta con que conviertas uno de los operandos. Por ejemplo:

DatosPIB DatosPib2010=new DatosPIB(Nombre,Pib2010,(((Pib2010-Pib2009)*100)/(double)Pib2009),2010);

Por cierto, y este comentario?
Cita:
/**
* Write a description of class Subnormal here.
WTF!

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 15/11/2014, 05:42
 
Fecha de Ingreso: octubre-2014
Mensajes: 46
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema de codigo

ajajajajajjaajajajaj no se puede explicar en java asi que me ahorro la explicacion

muchas gracias por la respuesta

Etiquetas: clase, programa, string, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:37.