他の

Mac [Java] doubleは逆参照できません

NS

DaveTaylor

オリジナルポスター
2007年11月6日
スコットランド、アバディーンシャー
  • 2010年1月25日
コード: 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'; } }
ヘルプ?笑

iShater

2002年8月13日


シカゴランド
  • 2010年1月25日
実際のエラーを投稿できますか?メソッドが終了する前にreturnステートメントを使用するのはなぜですか? NS

stanl8

2009年12月24日
マンチェスター、英国
  • 2010年1月25日
まず第一にあなたは試してみるべきです
リターン( '' + BMI);
つまり、「+」演算子は連結を実行します。

次に、上記のreturnステートメントが常に実行されるため、これらのifステートメントがいつ実行されるかがわかりません。 NS

DaveTaylor

オリジナルポスター
2007年11月6日
スコットランド、アバディーンシャー
  • 2010年1月25日
iShaterによると:実際のエラーを投稿できますか?メソッドが終了する前にreturnステートメントを使用するのはなぜですか? クリックして展開...

実際のエラーはdoubleであり、逆参照することはできません。

群衆

2006年10月2日
希望と栄光の国
  • 2010年1月25日
まず最初に、if .. elseステートメントをヒットする前に戻ります。これは、それらが呼び出されないことを意味します。

次に、メソッドはdoubleを返しますが、if ..elseステートメントで文字列を返そうとしています。

3番目に、toString()メソッドを呼び出すときは、プリミティブ型ではなくオブジェクトDoubleを使用する必要があります。したがって、BMIをdoubleではなくDouble(java.lang.Double)として宣言する必要があります。

簡単な例を次に示します。

コード: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

モデレータ
スタッフ
2009年8月9日
深海平原
  • 2010年1月25日
DaveTaylorは次のように述べています。実際のエラーは2倍であり、逆参照することはできません。 クリックして展開...

まず、これを行うことはできません:
コード:... BMI.toString ...
BMIは次のように宣言されているため ダブル 、プリミティブ型。私が覚えているように、Javaはこの状況ではオートボクシングを実行しません。

BMIが次のように宣言された場合 ダブル 、プリミティブ型のラッパークラスの場合、機能する可能性があります。

あなたがこれをすることができないことを除いて:
コード:... someObject.someMethod ...
Javaは自動的に()を追加しないためです。オブジェクトに対してtoStringメソッドを呼び出す場合は、メソッド呼び出しとして記述する必要があります。
コード:... anyObject.toString() ...
チュートリアルや本を使用していない場合は、実際に使用する必要があります。

lee1210

2005年1月10日
テキサス州ダラス
  • 2010年1月25日
java.lang.StringのvalueOf(double)メソッドの使用を提案することにより、これまでに行われた優れた観察結果に追加したかっただけです。これを実行して、文字列を取り戻すことができます。 String + double演算子の使用も問題なく機能しますが、doubleの文字列表現だけが必要な場合は必要ありません。

-読んだ NS

cx300

2008年9月12日
フロリダ州クレルモン
  • 2010年1月25日
私のJavaは少し錆びていますが、これは正しいはずです...

コード: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

モデレータ
スタッフ
2009年8月9日
深海平原
  • 2010年1月25日
cx300によると:私のJavaは少し錆びていますが、これは正しいはずです...

コード:public String calcBMI(int height, int weight) { double BMI; BMI = (weight / (height * height)); クリックして展開...

計算が(重量/(質量*質量))で、他の係数がない場合、高さの単位はメートル、質量(重量)の単位はキログラムです。高さが整数メートル(1、2、3)しか取れない場合は、深刻な精度の問題があります。

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

また、計算は完全に整数演算(つまり、除算の切り捨て)で実行されるため、これらのタイプは結果に小数値を生成しません。その後、整数の結果はdoubleに変換されます。小数部の可能性があるdouble計算が必要な場合は、少なくとも1つのオペランドがdouble型である必要があります。

この問題はJavaに固有のものではないと思います。整数演算と二重演算のルールが似ているCでも同様の問題が発生します。