LCM Class で最小公倍数を印字

C:\DATA\Java2\Class>java LcmClass
v1=24   v2=32   gcm=8
v1=30   v2=45   lcm=90
v1=30   v2=45   gcm=15
 -- Press any key to exit (Input "c" to continue) --
GCM Class を継承(extends)をした LCM Class を作成して最小公倍数を印字します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして LcmClass.java の名前で保存して下さい。
    //★ LCM Class を定義する  前田 稔
    public class LcmClass
    {   public static void main(String args[])
        {
            GCM  AppGCM= new GCM(24,32);
            LCM  AppLCM= new LCM(30,45);
            AppGCM.printGCM();
            AppLCM.printLCM();
            AppLCM.printGCM();
        }
    }
    
    class  GCM
    {
        int             v1,v2;
        int             gcm;
        private int     w;
        GCM(int a, int b)
        {   v1=w= a;
            v2=gcm= b;
            while(w!=gcm)
            {   if (w>gcm)  w-= gcm;
                else        gcm-= w;
            }
        }
        void printGCM()
        {   System.out.println("v1=" + v1 + "   v2=" + v2 + "   gcm=" + gcm);
        }
    }
    
    class  LCM  extends  GCM
    {
        private int     lcm;
        LCM(int a, int b)
        {   super(a,b);
            lcm= v1*v2/gcm;
        }
        void printLCM()
        {   System.out.println("v1=" + v1 + "   v2=" + v2 + "   lcm=" + lcm);
        }
    }
    
  2. LcmClass.java をコンパイルして class オブジェクトを実行して下さい。
    コンパイルの詳細は Java を動かす を参照して下さい。
  3. ページ先頭の画面が表示されたら完成です。

プログラムの説明

  1. 新しく作るクラスを導出クラス、継承元のクラスを基本クラスと言います。
    基本クラスをスーパークラス、導出クラス(派生クラス)をサブクラスと呼ぶこともあります。
    今回の場合は GCM class がスーパークラスで、LCM Class がサブクラスです。
    Java では継承できるクラスは一個だけに制限されています。
  2. LCM(最小公倍数)とは、2 つ以上の整数に共通の倍数のうちで最小のものを言います。
    分数計算の分母と言えば良くわかるでしょうか?。
    LCM(最小公倍数)を計算するには GCM(最大公約数)が必要です。
    二個のデータを V1,V2 とすると最小公倍数は次の式で計算できます。
    LCM(V1,V2)= V1*V2/GCM(V1,V2)
    このように GCM と LCM は非常に関連が深いので GCM を継承して LCM Class を作成することにします。
  3. GCM Class のソースコードです。
    コンストラクタで int gcm に a と b の最大公約数を求めます。
    v1, v2, gcm を private で宣言してはいけません。
    それは GCM を継承した LCM の中からこれらの領域を参照するためです。
    printGCM() では、元の値と最大公約数を印字します。
        class  GCM
        {
            int             v1,v2;
            int             gcm;
            private int     w;
            GCM(int a, int b)
            {   v1=w= a;
                v2=gcm= b;
                while(w!=gcm)
                {   if (w>gcm)  w-= gcm;
                    else        gcm-= w;
                }
            }
            void printGCM()
            {   System.out.println("v1=" + v1 + "   v2=" + v2 + "   gcm=" + gcm);
            }
        }
        
  4. LCM Class のソースコードです。
    extends GCM で GCM Class を継承しています。
    super(a,b); で LCM の Constructor から GCM の Constructor を呼び出します。
    GCM が呼び出されると gcm の領域には最大公約数が格納されるので、あとは LCM の計算だけです。
    GCM の領域を参照して lcm= v1*v2/gcm; で LCM を計算します。
    v1 と v2 の代わりに a と b を使っても同じです。
    LCM を印字する関数 printLCM() を定義して完成です。
        class  LCM  extends  GCM
        {
            private int     lcm;
            LCM(int a, int b)
            {   super(a,b);
                lcm= v1*v2/gcm;
            }
            void printLCM()
            {   System.out.println("v1=" + v1 + "   v2=" + v2 + "   lcm=" + lcm);
            }
        }
        
  5. main() 関数です。
    前回と同じように GCM class を使って最大公約数を印字しています。
    次に LCM class を使って最小公倍数を印字します。
    printGCM(); は GCM Class のメソッドですが、LCM Class が GCM Class を継承しているので LCM Class からも呼び出せることに注目して下さい。
        public class LcmClass
        {   public static void main(String args[])
            {
                GCM  AppGCM= new GCM(24,32);
                LCM  AppLCM= new LCM(30,45);
                AppGCM.printGCM();
                AppLCM.printLCM();
                AppLCM.printGCM();
            }
        }
        

【演習】

Class を継承する簡単なプログラムを作成して下さい。

【NOTE】

Java では継承できるクラスは一個だけに制限されています。
継承したクラスを呼び出すときは super キーワードが使われます。
class  LCM  extends  GCM
{       ・・・
    LCM(int a, int b)
    {   super(a,b);
        ・・・

超初心者のプログラム入門(Java2)