2016-10-03 11 views
0

私はクラス用の2クラスのBMI電卓で作業してきました。私は最終的にプログラムを実行するためにデバッグすることができました。しかし、私はそれが高さや重量を10進数で入力させないことに気づいた。高さ6.4を入れプログラムの実行時に不正な解決策がある

は、それが6身長220体重は常に低体重宣言し、読み間違ったBMIを示しているようだ置く

をクラッシュし

例:

身長6

重量220

BMI:得点$ 0.09

これはBMIが間違っていると計算しています。コードを見ると、なぜこの計算が間違っているのかわかりません。

-Edit-小数点以下を取得するように管理しました。 (皆さんありがとうございます!)しかし、それでもまだBMIを計算するのが面倒なようです。

-Edit- Code Works!

(コードパート1)更新MK2

using System; 

namespace Calculator 
{ 

public class BMICalc 
{ 
    private const 
     decimal REQ = 703; 
    private decimal weightPerson; 
    private decimal heightPerson; 

    public BMICalc() 
    { 

    } 
    public BMICalc(decimal weiP, decimal heiP) 
    { 
     this.weightPerson = weiP; 
     this.heightPerson = heiP; 

    } 

    public decimal SetBmi() 
    { 
     decimal bmi; 
     bmi = Convert.ToDecimal((this.weightPerson * 0.45m)/((this.heightPerson * 12 * 0.025m) * (this.heightPerson * 12 * 0.025m))); 

     if (bmi < 18.5m) 

     { 
      Console.WriteLine("UnderWeight"); 
      Console.ReadLine(); 
     } 
     if (bmi > 18.5m && bmi < 25.0m) 
     { 
      Console.WriteLine("Normal"); 
      Console.ReadLine(); 
     } 
     if (bmi > 25.0m && bmi < 29.9m) 
     { 
      Console.WriteLine("OverWeight"); 
      Console.ReadLine(); 
     } 
     if (bmi > 29.9m && bmi < 40.0m) 
     { 
      Console.WriteLine("Obese"); 
      Console.ReadLine(); 
     } 

     return bmi; 
    } 

    public override string ToString() 
    { 
     return "\tCalculator" + 
      "\n\n Weight:" + this.weightPerson + 
      "\n\n Height:" + this.heightPerson + 
      "\n\n BMI Score:" + SetBmi().ToString(); 


    } 
} 
} 

コード(その2)更新のMk 2

namespace Calculator 
{ 
public class App 
{ 
    public static void Main() // 
    { 
     decimal heiP, weiP; 

     heiP = InputHeight(); 

     weiP = InputWeight(); 



     BMICalc bmiCal = new BMICalc(weiP, heiP); 

     Console.Clear(); 
     Console.WriteLine(bmiCal.ToString()); 
     Console.ReadKey(); 
    } 
    public static decimal InputHeight() 
    { 
     decimal hNumber; 

     Console.Write("Please enter your height: "); 
     hNumber = Convert.ToDecimal(Console.ReadLine()); 
     return hNumber; 
    } 

    public static decimal InputWeight() 
    { 
     Decimal wNumber; 

     Console.Write("Please enter your weight: "); 

     wNumber = Convert.ToDecimal(Console.ReadLine()); 
     return wNumber; 
    } 


} 
} 
+2

"しかし、私はそれが小数点以下の高さや重さを入力しないように気づいた" - これは明示的に整数を期待しているからだ - Convert.ToInt32(Console.ReadLine())。また、値を整数として保存しています。つまり、BMIを計算するときは、[Integer Division](http://mathworld.wolfram.com/IntegerDivision.html)を実行しています。あなたのアプリケーションを修正してdouble/decimalsを処理すると、計算上の問題も修正されると思います – Rob

+0

"クラッシュ"したときにプログラムが投げている例外を投稿できますか? –

+0

すべての入力と計算では、数値は倍精度/小数であるとみなされますが、すべてのデータ型はintです。これはせいぜい切り捨てエラーを引き起こし、最悪の場合にクラッシュを引き起こします。 (それは、偶然にも、あなたが得ているものです。) – Abion47

答えて

0

あなたは、コンストラクタへの入力パラメータです重量(weiP)を期待、高さ(heiP)(その順番)BMICalcからの体重bmiCal =新しいBMICalc(heiP、weiP);

出力される値が間違っている理由です。パラメーターを交換してください。

EDIT

あなたは足のポンドで体重と身長を入力しているので、あなたはインチ(12乗じ)、その後もメトリック変換による身長と体重を掛けるに足を変換する必要があります。

だから、式は次のようになります。

bmi = Convert.ToDecimal((this.weightPerson * 0.45)/((this.heightPerson * 12 * 0.025) * (this.heightPerson * 12 * 0.025))); 

それがToStringメソッド()オーバーライドされたメソッドを使用する場合、通貨がでてきます。指定された書式は通貨用です。

+0

よしBMIを計算しています。しかし、それはまだいくつかの奇妙な理由のために通貨としてそれをやって間違ってBMIを計算している?例6.5と220が3,660.59を生成する –

+0

通貨が正直であることに気づいていないことが修正されました。 (私は、このコードを教科書の例ではなく、車のチケットのプログラムに基づいていました)とにかく、あなたの言うことは意味をなさない!私はBMIの計算を行う前にあなたが私に提供したコードを入れてみましたが、「演算子 '*」は小数点または二重には適用できません。 –

+0

私は10進数で0.45と0.025をキャストする必要があり、あなたが言及したエラーの世話 –

関連する問題