Khác

Mac [Java] double không thể được tham chiếu

NS

DaveTaylor

Áp phích gốc
Ngày 6 tháng 11 năm 2007
Aberdeenshire, Scotland
  • Ngày 25 tháng 1 năm 2010
Mã: 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'; } }
Cứu giúp? cười lớn

iShater

13 tháng 8, 2002


Chicagoland
  • Ngày 25 tháng 1 năm 2010
Bạn có thể đăng lỗi thực tế? Tại sao câu lệnh trả về của bạn lại nằm trước khi kết thúc phương thức của bạn? NS

stanl8

Ngày 24 tháng 12 năm 2009
Manchester, Vương quốc Anh
  • Ngày 25 tháng 1 năm 2010
Trước hết bạn nên thử
return ('' + BMI);
Tức là toán tử '+' sẽ thực hiện phép nối.

Thứ hai, tôi không hiểu khi nào những câu lệnh if đó sẽ thực thi vì bạn có câu lệnh return ở trên sẽ luôn thực thi NS

DaveTaylor

Áp phích gốc
Ngày 6 tháng 11 năm 2007
Aberdeenshire, Scotland
  • Ngày 25 tháng 1 năm 2010
iShater đã nói: Bạn có thể đăng lỗi thực tế không? Tại sao câu lệnh trả về của bạn lại nằm trước khi kết thúc phương thức của bạn? Bấm để mở rộng...

Lỗi thực tế là gấp đôi không thể được tham chiếu.

Căng mọng

Ngày 2 tháng 10 năm 2006
Vùng đất của Hy vọng và Vinh quang
  • Ngày 25 tháng 1 năm 2010
Trước hết, bạn quay trở lại trước khi nhấn câu lệnh if .. else có nghĩa là chúng sẽ không bao giờ được gọi.

Thứ hai, phương thức của bạn trả về một giá trị kép nhưng bạn đang cố gắng trả về một chuỗi trong câu lệnh if .. else của mình.

Thứ ba, khi gọi phương thức toString (), bạn cần sử dụng đối tượng Double thay vì kiểu nguyên thủy. Vì vậy, bạn nên khai báo BMI là Double (java.lang.Double) hơn là gấp đôi.

Đây là một ví dụ đơn giản:

Mã: 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

Người điều hành
Thành viên đội ngũ nhân viên
Ngày 9 tháng 8 năm 2009
Mặt phẳng Abysmal
  • Ngày 25 tháng 1 năm 2010
DaveTaylor cho biết: Lỗi thực tế là gấp đôi không thể được tham chiếu. Bấm để mở rộng...

Đầu tiên, bạn không thể làm điều này:
Mã: ... BMI.toString ...
bởi vì BMI được khai báo là kép , kiểu nguyên thủy. Java không thực hiện autoboxing trong trường hợp này, như tôi nhớ lại.

Nếu BMI được khai báo là Kép , lớp wrapper cho kiểu nguyên thủy, sau đó nó có thể hoạt động ...

Ngoại trừ việc bạn không thể làm điều này:
Mã: ... someObject.someMethod ...
bởi vì Java không tự động thêm () cho bạn. Nếu bạn muốn gọi phương thức toString trên một đối tượng, bạn phải viết nó dưới dạng lời gọi phương thức:
Mã: ... anyObject.toString() ...
Nếu bạn không sử dụng một hướng dẫn hoặc một cuốn sách, bạn thực sự nên làm như vậy.

lee1210

Ngày 10 tháng 1 năm 2005
Dallas, TX
  • Ngày 25 tháng 1 năm 2010
Tôi chỉ muốn thêm vào những quan sát tốt được thực hiện cho đến nay bằng cách đề xuất sử dụng phương thức valueOf (double) của java.lang.String. Bạn có thể chạy nó và lấy lại một chuỗi. Sử dụng toán tử String + double cũng hoạt động tốt, nhưng không cần thiết nếu tất cả những gì bạn muốn là biểu diễn String của một double.

-Đọc NS

cx300

Ngày 12 tháng 9 năm 2008
Clermont, FL
  • Ngày 25 tháng 1 năm 2010
Java của tôi là một chút gỉ nhưng điều này sẽ đúng ...

Mã: 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

Người điều hành
Thành viên đội ngũ nhân viên
Ngày 9 tháng 8 năm 2009
Mặt phẳng Abysmal
  • Ngày 25 tháng 1 năm 2010
cx300 đã nói: java của tôi là một chút gỉ nhưng điều này phải được ...

Mã: public String calcBMI(int height, int weight) { double BMI; BMI = (weight / (height * height)); Bấm để mở rộng...

Khi phép tính là (trọng lượng / (khối lượng * khối lượng)) mà không có hệ số nào khác, thì đơn vị chiều cao là mét và đơn vị khối lượng (trọng lượng) là kilôgam. Nếu chiều cao chỉ có thể tính theo số nguyên mét (1, 2, 3), bạn đang gặp vấn đề nghiêm trọng về độ chính xác.

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

Ngoài ra, các kiểu này sẽ không bao giờ tạo ra bất kỳ giá trị phân số nào trong kết quả, vì phép tính được thực hiện hoàn toàn bằng số học số nguyên (tức là phép chia cắt ngắn), sau đó kết quả số nguyên được chuyển đổi thành nhân đôi. Nếu bạn muốn một phép tính kép với khả năng là một phần phân số, thì ít nhất một toán hạng phải thuộc loại double.

Tôi không nghĩ vấn đề này là duy nhất đối với Java. Bạn sẽ gặp các vấn đề tương tự trong C, có các quy tắc tương tự cho số nguyên và số học kép.