De Outros

Mac [Java] duplo não pode ser referenciado

D

DaveTaylor

Pôster original
6 de novembro de 2007
Aberdeenshire, Escócia
  • 25 de janeiro 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'; } }
Ajuda? lol

iShater

13 de agosto de 2002


Chicagoland
  • 25 de janeiro de 2010
Você pode postar o erro real? Por que sua instrução de retorno está antes do final do seu método? S

Stanl8

24 de dezembro de 2009
Manchester, Reino Unido
  • 25 de janeiro de 2010
Em primeiro lugar, você deve tentar
retorno ('' + IMC);
Ou seja, o operador '+' executará a concatenação.

Em segundo lugar, não entendo quando essas instruções if serão executadas porque você tem uma instrução return acima que sempre será executada D

DaveTaylor

Pôster original
6 de novembro de 2007
Aberdeenshire, Escócia
  • 25 de janeiro de 2010
iShater disse: Você pode postar o erro real? Por que sua instrução de retorno está antes do final do seu método? Clique para expandir...

O erro real é duplo e não pode ser desreferenciado.

Cromulento

2 de outubro de 2006
A Terra de Esperança e Glória
  • 25 de janeiro de 2010
Em primeiro lugar, você retorna antes de clicar em suas instruções if .. else, o que significa que elas nunca serão chamadas.

Em segundo lugar, seu método retorna um double, mas você está tentando retornar uma string em suas instruções if .. else.

Em terceiro lugar, ao chamar o método toString (), você precisa usar o objeto Double em vez do tipo primitivo. Portanto, você deve declarar o IMC como duplo (java.lang.Double) em vez de duplo.

Aqui está um exemplo simples:

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); } }

chown 33

Moderador
Membro da equipe
9 de agosto de 2009
o plano abismal
  • 25 de janeiro de 2010
DaveTaylor disse: O erro real é duplo e não pode ser desreferenciado. Clique para expandir...

Primeiro, você não pode fazer isso:
Código: ... BMI.toString ...
porque o IMC é declarado como Duplo , o tipo primitivo. Java não executa autoboxing nesta situação, pelo que me lembro.

Se o IMC foi declarado como Dobro , a classe de wrapper para o tipo primitivo, então pode funcionar ...

Exceto que você não pode fazer isso:
Código: ... someObject.someMethod ...
porque o Java não adiciona () automaticamente para você. Se você deseja invocar o método toString em um objeto, deve escrevê-lo como uma invocação de método:
Código: ... anyObject.toString() ...
Se você não está usando um tutorial ou um livro, você realmente deveria estar.

lee1210

10 de janeiro de 2005
Dallas, TX
  • 25 de janeiro de 2010
Eu só queria acrescentar as boas observações feitas até agora, sugerindo o uso do método valueOf (double) de java.lang.String. Você pode executar isso e obter uma String de volta. Usar o operador String + double também funciona bem, mas não é necessário se tudo o que você deseja é a representação String de um double.

-Leitura C

cx300

12 de setembro de 2008
Clermont, FL
  • 25 de janeiro de 2010
Meu java está um pouco enferrujado, mas isso deve estar certo ...

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; } }

chown 33

Moderador
Membro da equipe
9 de agosto de 2009
o plano abismal
  • 25 de janeiro de 2010
cx300 disse: Meu java está um pouco enferrujado, mas isso deve estar certo ...

Código: public String calcBMI(int height, int weight) { double BMI; BMI = (weight / (height * height)); Clique para expandir...

Quando o cálculo é (peso / (massa * massa)) sem outros coeficientes, as unidades de altura são metros e as unidades de massa (peso) são quilogramas. Se a altura só pode assumir metros inteiros (1, 2, 3), você tem um sério problema de precisão.

http://en.wikipedia.org/wiki/Body_mass_index

Além disso, esses tipos nunca irão produzir qualquer valor fracionário no resultado, porque o cálculo é realizado inteiramente em aritmética inteira (isto é, divisão truncada), então o resultado inteiro é convertido em duplo. Se desejar um cálculo duplo com possibilidade de parte fracionária, pelo menos um operando deve ser do tipo duplo.

Não acho que esse problema seja exclusivo do Java. Você teria problemas semelhantes em C, que tem regras semelhantes para inteiros e aritmética dupla.