Otro

No se puede desreferenciar el doble de Mac [Java]

D

DaveTaylor

Poster original
6 de noviembre de 2007
Aberdeenshire, Escocia
  • 25 de enero de 2010
Código: 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
¿Puedes publicar el error real? ¿Por qué su declaración de devolución es antes del final de su método? S

stanl8

24 de diciembre de 2009
Manchester, Reino Unido
  • 25 de enero de 2010
Primero que nada deberías intentar
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 primer lugar, regresa antes de presionar sus declaraciones if .. else, lo que significa que nunca se llamarán.

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
Solo quería agregar a las buenas observaciones hechas hasta ahora sugiriendo el uso del método valueOf (double) de java.lang.String. Puede ejecutar esto y recuperar un String. El uso del operador String + double también funciona bien, pero no es necesario si todo lo que desea es la representación String de un doble.

-Lee C

cx300

Sep 12, 2008
Clermont, FL
  • 25 de enero de 2010
Mi java está un poco oxidado, pero esto debería estar bien ...

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.