読者です 読者をやめる 読者になる 読者になる

BMI。3、クラスライブラリ


前に書いてたBMIチェッカーの BMI 部分を抜き出して、クラスライブラリ化したものです。
一部構造を手直ししてます。使い易くなったかどうか不安ですが。


BmiTest.jar


パッケージ構成

./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;
    }
    
}