Друго

Mac [Java] double не може да бъде дерефериран

д

Дейв Тейлър

Оригинален плакат
6 ноември 2007 г
Абърдийншир, Шотландия
  • 25 януари 2010 г
Код: |_+_|
Помогне? хаха

iShater

13 август 2002 г


Чикаголенд
  • 25 януари 2010 г
Можете ли да публикувате действителната грешка? Защо вашето изявление за връщане е преди края на вашия метод? С

stanl8

24 декември 2009 г
Манчестър, Великобритания
  • 25 януари 2010 г
Преди всичко трябва да опитате
връщане ('' + BMI);
Това означава, че операторът '+' ще извърши конкатенация.

Второ, не разбирам кога тези if оператори някога ще се изпълнят, защото имате оператор за връщане по-горе, който винаги ще се изпълнява д

Дейв Тейлър

Оригинален плакат
6 ноември 2007 г
Абърдийншир, Шотландия
  • 25 януари 2010 г
iShater каза: Можете ли да публикувате действителната грешка? Защо вашето изявление за връщане е преди края на вашия метод? Щракнете, за да разгънете...

Действителната грешка е двойна, не може да бъде дереферирана.

Cromulent

2 октомври 2006 г
Страната на надеждата и славата
  • 25 януари 2010 г
На първо място, вие се връщате, преди да ударите вашите if.. else изявления, което означава, че те никога няма да бъдат извикани.

Второ, вашият метод връща double, но вие се опитвате да върнете низ във вашите if.. else изрази.

На трето място, когато извиквате метода toString(), трябва да използвате обекта Double, а не примитивния тип. Така че трябва да декларирате BMI като Double (java.lang.Double), а не двойно.

Ето един прост пример:

Код: |_+_|

chown33

Модератор
Член на персонала
9 август 2009 г
Бездната равнина
  • 25 януари 2010 г
Дейв Тейлър каза: Действителната грешка е двойна, не може да бъде дереферирана. Щракнете, за да разгънете...

Първо, не можете да направите това:
Код: |_+_|
тъй като ИТМ е деклариран като двойно , примитивен тип. Java не извършва автоматично боксиране в тази ситуация, както си спомням.

Ако ИТМ е деклариран като Двойна , класът обвивка за примитивен тип, тогава може да работи...

Освен че не можете да направите това:
Код: |_+_|
защото Java не добавя автоматично () вместо вас. Ако искате да извикате метода toString върху обект, трябва да го напишете като извикване на метод:
Код: |_+_|
Ако не използвате урок или книга, наистина трябва да го използвате.

lee1210

10 януари 2005 г
Далас, Тексас
  • 25 януари 2010 г
Просто исках да добавя към добрите наблюдения, направени досега, като предложих използването на метода valueOf(double) на java.lang.String. Можете да стартирате това и да получите обратно низ. Използването на оператора String + double също работи добре, но не е необходимо, ако всичко, което искате, е низовото представяне на double.

-Прочети ° С

cx300

12 септември 2008 г
Клермонт, Флорида
  • 25 януари 2010 г
Java ми е малко ръждясал, но това трябва да е правилно...

Код: |_+_|

chown33

Модератор
Член на персонала
9 август 2009 г
Бездната равнина
  • 25 януари 2010 г
cx300 каза: Java ми е малко ръждясал, но това трябва да е правилно...

Код: |_+_| Щракнете, за да разгънете...

Когато изчислението е (тегло/(маса * маса)) без други коефициенти, единиците за височина са метри, а единиците за маса (тегло) са килограми. Ако височината може да приеме само цели метри (1, 2, 3), имате сериозен проблем с точността.

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

Освен това тези типове никога няма да произведат никаква дробна стойност в резултата, тъй като изчислението се извършва изцяло в целочислена аритметика (т.е. съкращаващо деление), след което целочисленият резултат се преобразува в двоен. Ако искате двойно изчисление с възможност за дробна част, поне един операнд трябва да е от тип double.

Не мисля, че този проблем е уникален за Java. Ще имате подобни проблеми в C, който има подобни правила за целочислена и двойна аритметика.