コンソールから数値を入力する

C:\DATA\Java2\Dos>java Gcm
1件目の値をタイプして下さい : 32
2件目の値をタイプして下さい : 24
GCM= 8
LCM= 96
 -- Press any key to exit (Input "c" to continue) --
コンソールから2個の数値を入力してユークリッドの互除法により最大公約数と最小公倍数を計算します。

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

プログラムの作成

  1. メモ帳などでタイプして Gcm.java の名前で保存して下さい。
        // InputStreamとGCM,LCMの計算  前田 稔
        import java.io.*;
    
        class Gcm
        {   public static void main(String args[])
            {   BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
                String str;
                int    a,b,ab;
                try
                {   System.out.print("1件目の値をタイプして下さい : ");
                    str = input.readLine();
                    a= Integer.parseInt(str.trim());
                    System.out.print("2件目の値をタイプして下さい : ");
                    str = input.readLine();
                    b= Integer.parseInt(str.trim());
                    ab= a*b;
                    while(a!=b)
                    {   if (a>b)    a-= b;
                        else        b-= a;
                    }
                    System.out.println("GCM= " + a);
                    System.out.println("LCM= " + ab/a);
                }
                catch(IOException e)
                {   System.out.println("Exception : " + e);
                }
            }
        }
        
  2. Gcm.java をコンパイルして class オブジェクトを実行して下さい。
    コンパイルの詳細は Java を動かす を参照して下さい。
  3. 32と24を入力して、ページ先頭の画面が表示されたら完成です。

プログラムの説明

  1. コンソールから文字列をタイプ入力して数値に変換して格納します。
    java.io.*; をインポートして下さい。
    BufferedReader がコンソール入力のオブジェクトです。
    import java.io.*;
    
    {   BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    
  2. input.readLine() がコンソールからのタイプ入力で Integer.parseInt() が数値に変換するコードです。
    str.trim() で文字列の中の制御コードなどを削除します。
        str = input.readLine();
        a= Integer.parseInt(str.trim());
    
  3. try と catch でコンソール入力が成功したときと失敗したときの処理を記述します。
    try がコンソール入力が成功したときの処理です。
    catch がコンソール入力が失敗したときの処理で、通常はエラーメッセージを表示します。
        try
        {   :
            :
        }
        catch(IOException e)
        {   System.out.println("Exception : " + e);
        }
    
  4. ユークリッドの互除法の応用で最大公約数を求めるループです。
    本来ユークリッドの互除法では剰余を求めるのですが、アセンブラの名残で減算を使っています。
        while(a!=b)
        {   if (a>b)    a-= b;
            else        b-= a;
        }
    

【演習】

課題1

コンソールから5件のデータ(整数値)を入力して合計を表示して下さい。

課題2

コンソールから10件のデータ(整数値)を入力してブービー(小さい方から2番目の値)を表示して下さい。

課題3

データ件数が増えた(減った)ときに、簡単にプログラムを修正できるように配慮して下さい。
C言語では #define でデータ件数を定義して、簡単に件数を変更出来るようにするのですが。
Java では #define が使えないので、初期値を設定した変数を用いるのが良いでしょう。

【NOTE】

  1. コンソールから入力するデータは String 型です。
    String 型を int 型に変換するときは Integer.parseInt() を使います。
        String str;
        int    val;
        str = input.readLine();
        val = Integer.parseInt(str.trim());
        //val = Integer.parseInt(str);      //こちらでもOK
        
  2. String 型から int 以外の型に変換するメソッドも用意されています。
        Byte.parseByte(String)
        Short.parseShort(String)
        Integer.parseInt(String)
        Long.parseLong(String)
        Float.parseFloat(String)
        Double.parseDouble(String)
        
  3. parseXXX(String) に代えて valueOf(String) を使うことも出来ます。
        String str= "123";
        int val = Integer.valueOf(str).intValue();
        //int val = Integer.valueOf(str);   //こちらでもOK
        
  4. 逆に int 型を String 型に変換するときは Integer.toString() を使います。
        String str;
        int    val = 123;
        str = Integer.toString(val);
        
  5. 型.toString() を使って int 以外の型を String 型に変換することも出来ます。
        double val = 123.456;
        String str = Double.toString(val);
        
  6. メソッドを使わなくても、直接 String 型に代入することも出来ます。
    この方法が実用的かも知れません。
        String str;
        int    val = 123;
        str = "val=" + val;
        
  7. 16進数の機能も充実しています。
    int 型を16進数で印字する方法です。
        String str= Integer.toHexString(100);
        System.out.println(str);
        
    逆に16進文字列を int 型に変換します。
        int val = Integer.decode("0x12");
        System.out.println(val);
        val = Integer.decode("0x" + "123");
        System.out.println(val);
        

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