אַחֵר

לא ניתן לבטל את ההתייחסות של Mac [Java] כפול

ד

דייבטיילור

פוסטר מקורי
6 בנובמבר 2007
אברדנשייר, סקוטלנד
  • 25 בינואר 2010
קוד: |_+_|
עֶזרָה? חחח

iShater

13 באוגוסט 2002


שיקגולנד
  • 25 בינואר 2010
אתה יכול לפרסם את השגיאה האמיתית? מדוע הצהרת ההחזר שלך נמצאת לפני סוף השיטה שלך? ס

סטנל8

24 בדצמבר 2009
מנצ'סטר, בריטניה
  • 25 בינואר 2010
קודם כל כדאי לנסות
return ('' + BMI);
כלומר, האופרטור '+' יבצע שרשור.

שנית, אני לא מבין מתי הצהרות ה-if יבוצעו אי פעם כי יש לך הצהרת return למעלה שתמיד תתבצע ד

דייבטיילור

פוסטר מקורי
6 בנובמבר 2007
אברדנשייר, סקוטלנד
  • 25 בינואר 2010
iShater אמר: האם אתה יכול לפרסם את השגיאה בפועל? מדוע הצהרת ההחזר שלך נמצאת לפני סוף השיטה שלך? לחץ להרחבה...

השגיאה בפועל היא כפולה לא ניתנת להפרדה.

קרומולנט

2 באוקטובר 2006
ארץ התקווה והתהילה
  • 25 בינואר 2010
קודם כל אתה חוזר לפני שאתה מכה את אם.. אחרת הצהרות כלומר לעולם לא ייקרא.

שנית השיטה שלך מחזירה כפול אבל אתה מנסה להחזיר מחרוזת במשפטי if.. else שלך.

שלישית בעת קריאה למתודה toString() אתה צריך להשתמש באובייקט Double ולא בסוג הפרימיטיבי. אז אתה צריך להכריז על BMI ככפול (java.lang.Double) ולא כפול.

הנה דוגמה פשוטה:

קוד: |_+_|

chown33

מַנחֶה
חבר צוות
9 באוגוסט 2009
המישור התהומי
  • 25 בינואר 2010
דייבטיילור אמר: לא ניתן לזהות את השגיאה בפועל כפולה. לחץ להרחבה...

ראשית, אתה לא יכול לעשות את זה:
קוד: |_+_|
כי BMI מוכרז כ לְהַכפִּיל , הסוג הפרימיטיבי. ג'אווה לא מבצעת אוטובוקס במצב זה, כזכור.

אם ה-BMI הוכרז כ לְהַכפִּיל , מחלקת העטיפה לסוג הפרימיטיבי, אז זה עשוי לעבוד...

חוץ מזה שאתה לא יכול לעשות את זה:
קוד: |_+_|
מכיוון ש-Java לא מוסיפה אוטומטית () עבורך. אם ברצונך להפעיל את המתודה toString על אובייקט, עליך לכתוב אותה בתור הפעלת מתודה:
קוד: |_+_|
אם אתה לא משתמש במדריך או בספר, אתה באמת צריך לעשות זאת.

lee1210

10 בינואר 2005
דאלאס, טקסס
  • 25 בינואר 2010
רק רציתי להוסיף לתצפיות הטובות שנעשו עד כה על ידי הצעת שימוש בשיטת valueOf(double) של java.lang.String. אתה יכול להפעיל את זה ולקבל מחרוזת בחזרה. השימוש באופרטור String + double עובד מצוין, גם הוא, אבל אין צורך אם כל מה שאתה רוצה הוא ייצוג מחרוזת של כפול.

-לקרוא ג

cx300

12 בספטמבר 2008
קלרמונט, פלורידה
  • 25 בינואר 2010
הג'אווה שלי קצת חלודה אבל זה אמור להיות נכון...

קוד: |_+_|

chown33

מַנחֶה
חבר צוות
9 באוגוסט 2009
המישור התהומי
  • 25 בינואר 2010
cx300 אמר: הג'אווה שלי קצת חלודה אבל זה אמור להיות נכון...

קוד: |_+_| לחץ להרחבה...

כאשר החישוב הוא (משקל/(מסה *מסה)) ללא מקדמים אחרים, יחידות הגובה הן מטרים ויחידות המסה (משקל) הן קילוגרמים. אם הגובה יכול לקחת רק מטרים שלמים (1, 2, 3), יש לך בעיית דיוק רצינית.

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

כמו כן, סוגים אלו לעולם לא ייצרו ערך שבר כלשהו בתוצאה, מכיוון שהחישוב מתבצע כולו באריתמטיקה של מספרים שלמים (כלומר חיתוך חלוקה), ואז תוצאת המספרים השלמים מומרת לכפולה. אם אתה רוצה חישוב כפול עם אפשרות של חלק שבר, לפחות אופרנד אחד חייב להיות מסוג כפול.

אני לא חושב שהבעיה הזו ייחודית לג'אווה. יהיו לך בעיות דומות ב-C, שיש לו כללים דומים עבור מספר שלם וחשבון כפול.