2012-01-12 9 views
43

ここに私のコードです。何らかの理由で私のBMIが正しく計算されません。 電卓の出力をチェックすると、(10/((10/100)^2)))は1000になりますが、私のプログラムでは5になります。間違っていることはわかりません。私のコードは以下の通りです:Javaで数を電源にする

import javax.swing.*; 

public class BMI { 
    public static void main(String args[]) { 
     int height; 
     int weight; 
     String getweight; 
     getweight = JOptionPane.showInputDialog(null, "Please enter your weight in Kilograms"); 
     String getheight; 
     getheight = JOptionPane.showInputDialog(null, "Please enter your height in Centimeters"); 
     weight = Integer.parseInt(getweight); 
     height = Integer.parseInt(getheight); 
     double bmi; 
     bmi = (weight/((height/100)^2)); 
     JOptionPane.showMessageDialog(null, "Your BMI is: " + bmi); 
    } 
} 
+14

これはあなたが探している演算子ではありません。 – Malfist

+2

@マフリストあなたが書いたことを読んでいるうちに、ジェダイのように顔を手で振っているのを見ることができます –

+1

@マフリストlol =) – stytown

答えて

80

javaの中には、力を入れているわけではありません。それはXORを意味します。 199/100 1.

+3

私は間違っていたことが非常にシンプルでなければならないことを知っていました。ありがとうございました。 –

+2

@stytown:あなたの問題が解決したら答えを受け入れるべきです。 – unholysampler

3

^と評価さ

double height; 
double weight; 

注こと:あなたがJavaのMath.pow()


を使用することができますし、あなたがある - つまりdouble代わりのintを使用して検討する必要があります

あなたが望む演算子ではありません。あなたはjava.lang.Mathpow関数を探しています。

Math.pow(value, power)を使用できます。

例:

Math.pow(23, 5); // 23 to the fifth power 
8

あなたの計算が可能性が犯人です。使用してみてください:

bmi = weight/Math.pow(height/100.0, 2.0); 

分割する際height100の両方が、あなたはおそらく間違った答えを整数なっていたされているので。ただし、100.0はダブルです。私はweightをダブルにすることをお勧めします。また、^演算子は力のためではありません。代わりにMath.pow()メソッドを使用してください。

+1

ありがとうございます。だから私は1000を与えるのではなく、私が重量と高さとして10と10を入力すると私に999.9999を与えます。それは今でもずっと良くなっているようだ。 bmi = weight/Math.pow(高さ/ 100.00,2.00); – stytown

+1

それはあなたの 'double'値の精度に依存します。必要に応じて、計算の最後のステップとしていつでも丸めることができます。 – Bernard

+0

ありがとう、バーナード、私はそれを調べるでしょう。 – stytown

2
int weight=10; 
int height=10; 
double bmi; 
bmi = weight/Math.pow(height/100.0, 2.0); 
System.out.println("bmi"+(bmi)); 
double result = bmi * 100; 
result = Math.round(result); 
result = result/100; 
System.out.println("result"+result); 
+1

純粋なコードの代わりに説明を投稿してください。 = D –

8

我々はもちろんのOPのために遅すぎるパワー4(2^4)

答え= 16

+0

実際には、2のべき乗だけが必要な場合は、bitshiftingを使用してください: '1 << 4 = 16' – Xerus

3

に、この平均2

Math.pow(2, 4); 

を使用していますが、まだすることができます... 式を次のように並べ替えます。

int bmi = (10000 * weight)/(height * height) 

浮動小数点をすべて削除し、定数で除算を乗算に変換します。これは高速に実行されます。整数精度がこのアプリケーションにはおそらく適切ですが、そうでない場合は

double bmi = (10000.0 * weight)/(height * height) 

が改善されます。

関連する問題