0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初めてのJava】まずはコーディングしてみた(インターフェース)

Last updated at Posted at 2024-01-08

はじめに

インターフェースの実装練習として、
前回作成したBMI計算機にBMR(基礎代謝量)を計算する機能を付けてみました。

機能

 身体のパラメーター値(身長、体重、年齢など)をセットすると、BMI、BMRの計算結果を出力するツールです。
(値の入力はハードコーディング)

ソースコード

※長いので、折りたたんでいます。

App.java
public class App{
    public static void main(String[] args){

        try{
            Person person = new Person();
            if(!person.setParameter("John", 1.7, 60.5, 30, Person.Sex.MALE)){
                return;
            };

            Bmi bmi = new Bmi();
            Bmr bmr = new Bmr();

            bmi.calculation(person);
            bmr.calculation(person);

            person.display();
            bmi.explain();
            bmr.explain();

        }catch(Exception e){
            System.out.println("計算できませんでした");
            System.out.println("入力した値を確認してください");
        }
    }
}
BodyComposition.java
public interface BodyComposition {
    void calculation(Person person);
    void explain();
}
Bmi.java
public class Bmi implements BodyComposition {
    public void calculation(Person person){

        try{
            person.setBmi(person.getWeight() / person.getHeight() / person.getHeight()); 
        }catch(Exception e){
            System.out.println("入力値を確認してください");
        }        
    }

    public void explain(){
        System.out.println("======= BMIの算出 =======");
        System.out.println("体重kg ÷ (身長m)2");
        System.out.println("18.5未満 痩せ/ 25以上 肥満");
    }
}
Bmr.java
public class Bmr implements BodyComposition{
    public void calculation(Person person){

        try{
            if(person.getSex() == Person.Sex.MALE){
                person.setBmr((0.1238 + (0.0481 * person.getWeight()) + (0.0234 * person.getHeight()*100) - (0.0138 * person.getAge()) - 0.5473) * 1000 / 4.186);
            }else{
                person.setBmr((0.1238 + (0.0481 * person.getWeight()) + (0.0234 * person.getHeight()*100) - (0.0138 * person.getAge()) - 0.5473 * 2) * 1000 / 4.186);
            }
        }catch(Exception e){
            System.out.println("入力値を確認してください");
        }        
    }

    public void explain(){
        System.out.println("======= BMRの算出 =======");
        System.out.println("(0.1238+(0.0481 × 体重kg)+(0.0234 × 身長cm)-(0.0138 × 年齢)-性別指数)× 1000 ÷ 4.186");
        System.out.println(" ※ 性別指数 男:0.5473 女:0.5473 × 2");
    }    
}
Person.java
public class Person {
    private String name;
    private double height = 0.0;
    private double weight = 0.0;
    private int age = 0;
    public enum Sex{
        MALE,
        FEMALE
    }
    private Sex sex = Sex.MALE;
    private double bmi = 0.0;
    private double bmr = 0.0; // 基礎代謝量

    public static final double HEIGHT_MAX = 3.0;
    public static final double WEIGHT_MAX = 700.0;
    public static final int AGE_MAX = 150;

    public boolean setParameter(String name, double height, double weight, int age, Sex sex){

        if(!isValidHeight(height) || !isValidWeight(weight) || !isValidAge(age)){
            return false;
        }
        this.name = name;
        this.height = height;
        this.weight = weight;
        this.age = age;
        System.out.println("正しくセットされました");
        return true;
    }

    public void display(){
        System.out.println("名前: " + this.name);
        System.out.println("身長: " + this.height);
        System.out.println("体重: " + this.weight);
        System.out.println("BMI: " + this.bmi);
        System.out.println("BMR: " + this.bmr);
    }

    private boolean isValidHeight(double height){
        if((0 > height) || (height > HEIGHT_MAX)){
            System.out.println("身長の値を間違えています。");
            System.out.println("身長の単位はmでセットしてください。");
            System.out.println("(" + HEIGHT_MAX + "mまで)");
            return false;
        }
        return true;
    }
    private boolean isValidWeight(double weight){
        if((0 > weight) || (weight > WEIGHT_MAX)){
            System.out.println("体重の値を間違えています。");
            System.out.println("体重の単位はkgでセットしてください");
            System.out.println("(" + WEIGHT_MAX + "kgまで)");
            return false;
        }
        return true;
    }
    private boolean isValidAge(double age){
        if((0 > age) || (age > AGE_MAX)){
            System.out.println("年齢の値を間違えています。");     
            System.out.println("(" + AGE_MAX + "才まで)");
            return false;
        }
        return true;
    }
    
    // setter / getter
    public double getHeight() {
        return this.height;
    }
    public double getWeight() {
        return this.weight;
    }
    public int getAge() {
        return this.age;
    }
    public Sex getSex() {
        return this.sex;
    }
    public void setBmi(double bmi) {
        this.bmi = bmi;
    }
    public void setBmr(double bmr) {
        this.bmr = bmr;
    }
}

結果

$ java App
正しくセットされました
名前: John
身長: 1.7
体重: 60.5
BMI: 20.93425605536332
BMR: 1445.4252269469664
======= BMIの算出 =======
体重kg ÷ (身長m)2
18.5未満 痩せ/ 25以上 肥満
======= BMRの算出 =======
(0.1238+(0.0481 × 体重kg)+(0.0234 × 身長cm)-(0.0138 × 年齢)-性別指数)× 1000 ÷ 4.186
 ※ 性別指数 男:0.5473 女:0.5473 × 2

感想

今回も作成に2時間くらいかかりました。
課題を考えること自体、理解を深める作業になりました。
実際の業務では BMIとBMRの計算をクラス分けする必要性はないのかもしれません。
もう少しうまい課題を作れたらなと感じました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?