DaveTaylor
Poster original- 6 de noviembre de 2007
- Aberdeenshire, Escocia
- 25 de enero de 2010
public double calcBMI() { double BMI; BMI = weight / (height * height); return BMI; if (BMI >=30) { return BMI.toString + 'Obese'; } else if (BMI >=25) { return BMI.toString + 'Overweight'; } else if (BMI >=18.5) { return BMI.toString + 'Normal Weight'; } else { return BMI.toString + 'Underweight'; } }
¿Ayudar? jajaja
iShater
- 13 de agosto de 2002
- Chicagoland
- 25 de enero de 2010
stanl8
- 24 de diciembre de 2009
- Manchester, Reino Unido
- 25 de enero de 2010
retorno ('' + IMC);
Es decir, el operador '+' realizará la concatenación.
En segundo lugar, no entiendo cuándo se ejecutarán esas declaraciones if porque tiene una declaración de devolución anterior que siempre se ejecutará D
DaveTaylor
Poster original- 6 de noviembre de 2007
- Aberdeenshire, Escocia
- 25 de enero de 2010
iShater dijo: ¿Puedes publicar el error real? ¿Por qué su declaración de devolución es antes del final de su método? Haga clic para ampliar...
El error real es doble y no se puede desreferenciar.
Cromulento
- Oct 2, 2006
- La tierra de la esperanza y la gloria
- 25 de enero de 2010
En segundo lugar, su método devuelve un doble, pero está tratando de devolver una cadena en sus declaraciones if .. else.
En tercer lugar, al llamar al método toString (), debe utilizar el objeto Double en lugar del tipo primitivo. Por lo tanto, debe declarar el IMC como doble (java.lang.Double) en lugar de como doble.
A continuación, se muestra un ejemplo sencillo:
Código:
public class Main { public static void main(String[] args) { Double test; test = 0.843; String test_string = test.toString(); System.out.println(test_string); System.out.println(test); } }
chown33
Moderador
Miembro del equipo- 9 de agosto de 2009
- el plano abismal
- 25 de enero de 2010
DaveTaylor dijo: El error real es doble y no se puede desreferenciar. Haga clic para ampliar...
Primero, no puedes hacer esto:
Código:
... BMI.toString ...
porque el IMC se declara como doble , el tipo primitivo. Java no realiza autoboxing en esta situación, según recuerdo.
Si el IMC se declarara como Doble , la clase contenedora para el tipo primitivo, entonces podría funcionar ...
Excepto que no puedes hacer esto:
Código:
... someObject.someMethod ...
porque Java no agrega automáticamente () por usted. Si desea invocar el método toString en un objeto, debe escribirlo como una invocación de método:
Código:
... anyObject.toString() ...
Si no está utilizando un tutorial o un libro, debería hacerlo.
lee1210
- 10 de enero de 2005
- Dallas, TX
- 25 de enero de 2010
-Lee C
cx300
- Sep 12, 2008
- Clermont, FL
- 25 de enero de 2010
Código:
public String calcBMI(int height, int weight) { double BMI; BMI = (weight / (height * height)); String str = ; if (BMI >=30) { str = (Double.toString(BMI) + Obese); return str; } else if (BMI >=25) { str = (Double.toString(BMI) + Overweight); return str; } else if (BMI >=18.5) { str = (Double.toString(BMI) + Normal Weight); return str; } else { str = (Double.toString(BMI) + Underweight); return str; } }
chown33
Moderador
Miembro del equipo- 9 de agosto de 2009
- el plano abismal
- 25 de enero de 2010
cx300 dijo: Mi java está un poco oxidado, pero esto debería ser correcto ...
Código:public String calcBMI(int height, int weight) { double BMI; BMI = (weight / (height * height));
Haga clic para ampliar...
Cuando el cálculo es (peso / (masa * masa)) sin otros coeficientes, las unidades de altura son metros y las unidades de masa (peso) son kilogramos. Si la altura solo puede tomar metros enteros (1, 2, 3), tiene un grave problema de precisión.
http://en.wikipedia.org/wiki/Body_mass_index
Además, estos tipos nunca producirán ningún valor fraccionario en el resultado, porque el cálculo se realiza completamente en aritmética de enteros (es decir, truncando la división), luego el resultado entero se convierte en doble. Si desea un cálculo doble con la posibilidad de una parte fraccionaria, al menos un operando debe ser de tipo double.
No creo que este problema sea exclusivo de Java. Tendría problemas similares en C, que tiene reglas similares para aritmética de números enteros y dobles.
Entradas Populares