私はクラス用の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;
}
}
}
"しかし、私はそれが小数点以下の高さや重さを入力しないように気づいた" - これは明示的に整数を期待しているからだ - Convert.ToInt32(Console.ReadLine())。また、値を整数として保存しています。つまり、BMIを計算するときは、[Integer Division](http://mathworld.wolfram.com/IntegerDivision.html)を実行しています。あなたのアプリケーションを修正してdouble/decimalsを処理すると、計算上の問題も修正されると思います – Rob
"クラッシュ"したときにプログラムが投げている例外を投稿できますか? –
すべての入力と計算では、数値は倍精度/小数であるとみなされますが、すべてのデータ型はintです。これはせいぜい切り捨てエラーを引き起こし、最悪の場合にクラッシュを引き起こします。 (それは、偶然にも、あなたが得ているものです。) – Abion47