C# BMI計算 で基礎から学ぶ


全体像

namespace XXXX
{
    アクセス修飾子 class Xxx
    {
        //メンバ変数
        アクセス修飾子 データ型 メンバ変数名1{get; set;} *1//コンストラクタ:クラスの外部から持ってくるもの
        アクセス修飾子 Xxx (データ型 引数*2)
        {
            this.メンバ変数*1 =  引数*2
            …
        }

        //メンバ関数
        アクセス修飾子 (void or データ型) 関数名()
        {
            //処理
        }
    }
}

オブジェクトとは

オブジェクト指向とは、
   データと処理をひとかたまりにすること。

クラスとは

クラスとは、
   ・雛型(ひながた)のこと。
   ・データと処理を定義すること。

class Xxxx
{
    フィールド(データ, メンバ変数)
    メソッド1(別名:メンバ関数, 処理)
  メソッド2(別名:メンバ関数, 処理)など
}

クラス:例えば

人間クラスの属性(データの集まり)を考えてみる。
なんでもいい。身長、名前、生年月日、電話番号、好きな色、性別などなど。
キーワードはclass

そうしたデータをメンバ変数(フィールド)、それらを処理するものをメンバ関数という。
メンバー = メンバ変数 + メンバ関数

関数とは?(知らない人向け)
次に、処理(メンバ関数):処理する前後で考えてみる。
ブラックボックスに1を入れる。2が返ってきた。
2を入れる。4が返ってきた。
Nを入れる。2Nが返ってきた。
2倍になっている!←ざっくりこれがメンバ関数

Nを入れる。2Nが返ってきた。
N:引数(ひきすう)
2N:を戻り値    であることも抑えよう。

インスタンス

インスタンスとは
   ・クラスにデータを与えること。
   ・定義したデータと処理にデータを与えること。
   ・実際にデータを雛型に入れること。

すなわち、クラス内で宣言したメンバーにデータを入れて、処理をしてもらう!ということ。
キーワードはnew

実例:複数人のBMIを求めよう。

事前知識:

1. 動的配列

2. n人の体重と身長からBMIの数値と判定を出す。
・Humanクラスを作成
メンバー変数:名前と身長(m)、体重(kg)の3つ
メンバー関数:BmiクラスのBMIの計算メソッドを呼び出し、計算させ、名前とBMI、判定結果を表示する

・Bmiクラスを作成
メンバー変数:
メンバー関数:BmiクラスのBMIの計算メソッドを呼び出し、計算させ、名前とBMI、判定結果を表示する

https://qiita.com/Solpha/items/2a95f0dea1583930142a
https://keisan.casio.jp/exec/system/1161228732#!
using System;
using System.Collections.Generic;

public class Human
{
    // ここで定義されるのはクラスレベルのフィールド(メンバ変数)
    private string _name;
    private double _weight;
    private double _height;

    // コンストラクタ
    public Human(string name, double weight, double height)
    {
        Name = name;
        Weight = weight;
        Height = height;
    }

    // プロパティ(初期値, 値の検証)
    public string Name
    {
        get { return _name; }
        set
        {
            if (string.IsNullOrEmpty(value))
                throw new ArgumentException("名前は空ではない必要があります。");
            _name = value;
        }
    }

    public double Weight
    {
        get { return _weight; }
        set
        {
            if (value <= 0)
            {
                throw new ArgumentException("体重は0より大きくなければなりません。");
            }
            _weight = value;
        }
    }

    public double Height
    {
        get { return _height; }
        set
        {
            if (value <= 0)
            {
                throw new ArgumentException("身長は0より大きくなければなりません。");
            }
            _height = value;
        }
    }


    

    //BMIの計算
    public double bmi => _weight / (_height * _height);

    // BMIから判定
    public string BMICategory
    {
        get
        {
            if (bmi < 18.5)
                return "やせ型";
            else if (bmi >= 18.5 && bmi < 25)
                return "普通";
            else if (bmi >= 25 && bmi < 30)
                return "肥満1度";
            else if (bmi >= 30 && bmi < 35)
                return "肥満2度";
            else if (bmi >= 35 && bmi < 40)
                return "肥満3度";
            else
                return "肥満4度";
        }
    }

    //名前とBMI、判定を表示
    public void DisplayBmi()
    {
        Console.WriteLine($"{_name}さんは{bmi:F2}({BMICategory}).");
    }
}

class Program
{
    static void Main()
    {
        List<Human> people = new List<Human>
        {

            new Human("Bob", 90, 1.78),
            new Human("Charlie", 55, 1.60),
            new Human("David", 75, 1.75),
            new Human("Eve", 50, 1.58)
        };

        try
        {
            people.Add(new Human("Alice", -1, 1.65));
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e.Message);
        }

        foreach (var person in people)
        {
            person.DisplayBmi();
        }
        Console.ReadLine();
    }
}








この記事が気に入ったらサポートをしてみませんか?