BMI。3、クラスライブラリ
前に書いてたBMIチェッカーの BMI 部分を抜き出して、クラスライブラリ化したものです。
一部構造を手直ししてます。使い易くなったかどうか不安ですが。
パッケージ構成
./BmiTest.java ./jp/regekatsu/utility/Bmi.java
./BmiTest.java
/*--------------------------------------------------------------------------------- class BmiTest version 0.01 May 24, 2012 by DumBo ---------------------------------------------------------------------------------*/ import jp.regekatsu.utility.Bmi; class BmiTest { public static void main(String[] args) { String[] sex = {"Male", "Female"}; String[] judge = {"Slender", "Standard", "Plump", "Fat"}; Bmi bmi = new Bmi(); bmi.setSex(Bmi.SEX_MALE); bmi.setHeight(185.0d); bmi.setWeight(75.0d); System.out.printf(" Sex : %s\n", sex[bmi.getSex()]); System.out.printf(" Height : %.1f cm\n", bmi.getHeight()); System.out.printf(" Weight : %.1f kg\n\n", bmi.getWeight()); System.out.printf(" Bmi : %.1f\n", bmi.getBmi()); System.out.printf(" IdealBmi : %.1f\n", bmi.getIdealBmi()); System.out.printf(" IdealWeight : %.1f kg\n", bmi.getIdealWeight()); System.out.printf(" NecessaryCalory : %.1f kcal\n\n", bmi.getNecessaryCalory()); System.out.printf(" Judge : %s\n", judge[bmi.getJudge()]); } }
./jp/regekatsu/utility/Bmi.java
/*--------------------------------------------------------------------------------- class Bmi version 0.03 May 24, 2012 by DumBo ---------------------------------------------------------------------------------*/ package jp.regekatsu.utility; public class Bmi { public static final int JUDGE_SLENDER = 0; public static final int JUDGE_STANDARD = 1; public static final int JUDGE_PLUMP = 2; public static final int JUDGE_FAT = 3; public static final int SEX_MALE = 0; public static final int SEX_FEMALE = 1; int sex; double height; double weight; double idealBmi; public int getSex() { return sex; } public void setSex(int sex) { //性別の指定値が正しいか確認する。 if(sex < SEX_MALE || sex > SEX_FEMALE) throw new IllegalArgumentException("性別の設定値に誤りがあります。"); this.sex = sex; //性別によって理想 BMI を変更、設定する。 switch (this.sex) { case SEX_MALE: idealBmi = 22.0d; break; case SEX_FEMALE: idealBmi = 21.0d; break; default: throw new IllegalArgumentException("予期しない例外が発生しました。"); } } public double getHeight() { return height; } public void setHeight(double height) { //身長の指定が0以下でないか確認する。 if(height <= 0.0d) throw new IllegalArgumentException("身長は0以上を設定してください。"); this.height = height; } public double getWeight() { return weight; } public void setWeight(double weight) { //体重の指定が0以下でないか確認する。 if(weight <= 0.0d) throw new IllegalArgumentException("体重は0以上を設定してください。"); this.weight = weight; } public int getJudge() { double bmi = getBmi(); int judge; //BMI値が20未満 = やせ if(bmi < 20.0d) { judge = JUDGE_SLENDER; //BMI値が20以上24未満なら = 普通 } else if(bmi >= 20.0d && bmi < 24.0d) { judge = JUDGE_STANDARD; //BMI値が24以上26.4未満 = 過体重 } else if(bmi >= 24.0d && bmi < 26.4d) { judge = JUDGE_PLUMP; //BMI値が26.4以上 = 肥満 } else { judge = JUDGE_FAT; } return judge; } public double getBmi() { //もしも身長が 0 だった場合ゼロ除算となってしまう為、例外を発生させるようにする。 if(height == 0.0d) { throw new IllegalArgumentException("ゼロ除算が発生しました。" + "設定を前もって行ったか確認してください。"); } return weight / height / height * 10000.0d; } public double getIdealBmi() { return idealBmi; } public void setIdealBmi(double idealBmi) { this.idealBmi = idealBmi; } public double getNecessaryCalory() { return getIdealWeight() * 30.0d; } public double getIdealWeight() { return height * height * idealBmi / 10000.0d; } }