Report#3

課題

講義資料を参考にJavaの基礎的な文法について、教科書と対応させながら解説・考察せよ。

  • ソースプログラム1
  • public /*これもコメントです*/ class Test01 {   // Test01.java
        public static void main(String args[]) {   // mainの記述
            System.out.println("コメント");
            cmnt();                                // cmntスレッドの呼び出し
            System.out.println("¥n¥n文字列出力");
            smp1();
            System.out.println("¥n¥n変数宣言と数値出力");
            smp2();
            System.out.println("¥n¥n繰り返し処理");
            smp3();
            System.out.println("¥n¥n条件処理");
            smp4();
        }
    
        public static void cmnt() {                // mainの記述
            System.out.println("My first Java.");  // 文字列出力する
        }
    
        public static void smp1() {
            System.out.print("AAAAA");
            System.out.print("BBBBB¥nCCCCC¥n");
            System.out.println("DDDDD");
            System.out.println("EEEEE¥nFFFFF¥n¥nGGGGG");
        }
    
        public static void smp2() {
            int a, b, sum;
            
            a = 100;
            b = 200;
            sum = a + b;
            System.out.print("a=");              // 文字列だけ出力
            System.out.println(a);               // 数値だけ出力
            System.out.println("b=" + b);        // 文字列と数値を出力
            System.out.println("a+b=" + sum);    // 結果を出力
            System.out.println("a+b=" + (a+b));  // 直接計算させる
        }
    
        public static void smp3() {
            int i, sum;
            
            for (i=1; i<=5; i++)
                System.out.println("i=" + i);
    
            sum = 0;
            for (i=1; i<=5; i++) {
                sum = sum + i;
                System.out.println("sum=" + sum);
            }
        }
    
        public static void smp4() {
            int i;
    
            for (i=1; i<=5; i++) {
                System.out.print("i=" + i);
                if (i < 3)
                    System.out.println(" 3未満です");
                else
                    System.out.println(" 3以上です");
            }
        }
    
    }                                                                              
    

  • ソースプログラム1の実行結果
  • コメント My first Java. 文字列出力 AAAAABBBBB CCCCC DDDDD EEEEE FFFFF GGGGG 変数宣言と数値出力 a=100 b=200 a+b=300 a+b=300 繰り返し処理 i=1 i=2 i=3 i=4 i=5 sum=1 sum=3 sum=6 sum=10 sum=15 条件処理 i=1 3未満です i=2 3未満です i=3 3以上です i=4 3以上です i=5 3以上です

  • ソースプログラム1の考察
  • コメントについて
      コメントには単一行コメントと複数行コメントとドキュメーションコメントがある。 単一行コメントとは「//」ではじまり、その行以降の文字が行末尾までコメントとして解釈される。 複数行コメントとは「/*」ではじまり、「*/」で終わる。名前の通り複数行にわたって書くことができる。 ドキュメーションコメント「/**」ではじまり、「*/」で終わる。 ツールを使ってソースファイルからコメントを抜き出し、そのプログラムのマニュアルを自動的に作成するために使われる。
  • 文字列出力について
      文字列を出力するためには「System.out.println("----")」か「System.out.print("----")」を使う。 前者は文字列を出力したあと改行をするが、後者は改行をしないという特徴がある。 「/n」を使うことによって改行をするやりかたもある。
  • 変数宣言と数値出力について
      Javaでは8つの基本データ型がある。 char型・・・16ビットUnicodeキャラクターデータ。 boolean・・・真偽値。 byte・・・8ビット符号付き整数。 short・・・16ビット符号付き整数。 int・・・32ビット符号付き整数。 long・・・64ビット符号付き整数。 float・・・32ビット符号付き浮動小数点数。 double・・・64ビット符号付き浮動小数点数。
  • 繰り返し処理について
      Javaには3種類のループステートメントがある。 上のソースプログラムではfor文が使われている。 for文はfor(初期化;繰り返し終了条件;ループ制御変数の変化)で表す。
  • 条件処理について
      条件処理はif文で表される。 if(条件文) else if(条件文)・・・else(条件文)であらわす。 上から下の順番で評価される。
  • 補足1
  • バックスラッシュコード
    コード 意味
    \b バックスペース
    \n 改行
    \r キャリッジリターン
    \f フォームフィード
    \t 水平タブ
    \"

    二重引用符

    \' 一重引用符
    \0 null文字
    \\ バックスラッシュ
    \N 8進定数(N=0〜7)
    \NN 8進定数(N=0〜7)
    \MNN 8進定数(M=0〜3、N=0〜7)
    \uxxxx Unicode文字(xxxxは4桁の16進定数)

  • ソースプログラム2
  • public class Test02 {                  // Test02.java
        public static void main(String args[]) {
            char    ch;
            boolean bdt;
            int     idt;
            long    ldt;
            float   fdt;
            double  ddt;
            String  ss;
            final int CNST1 = 1234;      // final定数
    
            ch = 'A';                    // 半角文字
            System.out.println("文字=" + ch + " code=" + (int)ch);
            ch = '亜';                   // 全角文字
            System.out.println("文字=" + ch + " code=" + (int)ch);
    
    
            bdt = true;
            System.out.println("bdt = " + bdt);
    
            idt = 1234567890;
            System.out.println("idt = " + idt);
    
            ldt = 1234567890123456789L;  // Lはlong値を示す
            System.out.println("ldt = " + ldt);
    
            fdt = 123.456F;              // Fはfloat値を示す
            System.out.println("fdt = " + fdt);
    
            ddt = 123.456789012345;
            System.out.println("ddt = " + ddt);
    
            idt  = 022;                  //  8進数の22
            System.out.println("8進22 = " + idt);
    
            idt = 0x22;                  // 16進数の22
            System.out.println("16進22 = " + idt);
    
            ddt  = 5.67e4;               // 指数表現の56700
            System.out.println("指数 = " + ddt);
    
            ch = '¥n';                   // エスケープ文字
            System.out.println("改行文字コード = " + (int)ch);
    
            ss = "AAAA¥tBBBB";           // 文字列定数(エスケープ文字を含む)
            System.out.println("ss = " + ss);
    
            System.out.println("CNST1 = " + CNST1);
        }
    }
    

  • ソースプログラム2の実行結果
  • 文字=A code=65             <= 半角文字
    文字=亜 code=20124         <= 全角文字
    bdt = true                 <= 論理定数
    idt = 1234567890           <= int型
    ldt = 1234567890123456789  <= Lを付与したlong値定数
    fdt = 123.456              <= Fを付与したfloat値定数
    ddt = 123.456789012345     <= double型
    8進22 = 18                 <= 8進数の22
    16進22 = 34                <= 16進数の22
    指数 = 56700.0             <= 5.67e4
    改行文字コード = 10        <= エスケープ文字¥n
    ss = AAAA       BBBB       <= ¥t(タブ)を含む文字列
    CNST1 = 1234               <= final定数
    

  • ソースプログラム2の考察
  • final定数とは名前付きの定数を作成する目的で使われる。
  • 基本データ型は実行結果で示したとおりである。詳しくは下記の補足2に表として示す。
  • Javaでのchar型はUnicode文字を表すため16ビットとなる。 Unicodeを使用しているため漢字などもコードで表せることが可能。
  • boolean型変数は、tureかfalseのどちらかの値をとる。
  • String型について
      javaの文字列はNULLを終了文字にする方式ではない。 文字列は二重引用符(")で囲む。
  • char型について
      キャラクタリテラル(単一文字)は単一引用符(')で囲む 16bitUnicodeキャラクタ
  • 補足2
  • 8つの基本データ型
    説明
    char 16ビットUnichodeキャラクタデータ
    boolean 真偽値
    byte 8ビット符号付き整数
    short

    16ビット符号付き整数

    int 32ビット符号付き整数
    long 64ビット符号付き整数
    float 32ビット符号付き浮動小数点
    double 64ビット符号付き浮動小数点

  • ソースプログラム3
  • public class Test06 {                 // Test06.java
        public static void main(String args[]) {
            System.out.println("算術演算子");
            comp1();
            System.out.println("¥n¥n関係演算子");
            comp2();
            System.out.println("¥n¥n論理演算子");
            comp3();
            System.out.println("¥n¥nインクリメント/デクリメント演算子");
            comp4();
        }
    
        public static void comp1() {
            int a, b, c;
            double f, g, h;
    
            a = 100;   System.out.println("a   = " + a);
            b = 30;    System.out.println("b   = " + b);
            c = a + b; System.out.println("a+b = " + c);   // 加算
            c = a - b; System.out.println("a-b = " + c);   // 減算
            c = a * b; System.out.println("a*b = " + c);   // 乗算
            c = a / b; System.out.println("a/b = " + c);   // 整数除算
            c = a % b; System.out.println("a%b = " + c);   // 整数剰余
    
            f = 90.0;  System.out.println("f   = " + f);
            g = 40.0;  System.out.println("g   = " + g);
            h = f / g; System.out.println("f/g = " + f/g); // 浮動小数点数除算
        }
    
        public static void comp2() {
            int a;
            for (a=1; a<=5; a++) {
                System.out.println("--------" + a);
                if (a < 2)  System.out.println("2未満");
                if (a >= 4) System.out.println("4以上");
                if (a == 3) System.out.println("3である");
                if (a != 3) System.out.println("3ではない");
            }
        }
    
        public static void comp3() {
            int a;
    
            for (a=1; a<=5; a++) {
                System.out.println("--------" + a);
                if (a>=2 && a<=4)
                    System.out.println("2以上かつ4以下");
                if (a<2 || a>4)
                    System.out.println("2未満または4より大");
                if (!(a==1 || a==3))
                    System.out.println("1または3、ではない");
            }
        }
    
        public static void comp4() {
            int dt[] = {100, 200, 300};    // 配列を確保
            int n;
    
            // ++演算子を使わないときの記述
            n = 0;
            System.out.println(dt[n]);     // dt[0]を表示
            n = n +1;
            System.out.println(dt[n]);     // dt[1]を表示
            n = n +1;
            System.out.println(dt[n]);     // dt[2]を表示
    
            // ++演算子を使ったときの記述
            n = 0;
            System.out.println(dt[n++]);   // dt[0]を表示
            System.out.println(dt[n++]);   // dt[1]を表示
            System.out.println(dt[n++]);   // dt[2]を表示
    
            // --演算子を使う
            n = 5;
            while (--n >= 0) {             // n回繰り返す
                System.out.println("n=" + n);
            }
        }
    
    }
    

  • ソースプログラム3の実行結果
  • 算術演算子
    a   = 100
    b   = 30
    a+b = 130
    a-b = 70
    a*b = 3000
    a/b = 3
    a%b = 10
    f   = 90.0
    g   = 40.0
    f/g = 2.25
    
    
    関係演算子
    --------1
    2未満
    3ではない
    --------2
    3ではない
    --------3
    3である
    --------4
    4以上
    3ではない
    --------5
    4以上
    3ではない
    
    
    論理演算子
    --------1
    2未満または4より大
    --------2
    2以上かつ4以下
    1または3、ではない
    --------3
    2以上かつ4以下
    --------4
    2以上かつ4以下
    1または3、ではない
    --------5
    2未満または4より大
    1または3、ではない
    
    
    インクリメント/デクリメント演算子
    100
    200
    300
    100
    200
    300
    n=4
    n=3
    n=2
    n=1
    n=0
    

  • ソースプログラム3の考察
  • 算術演算について
      +・・・加算 -・・・減算(単項マイナス) *・・・乗算 /・・・除算 %・・・剰余 +=・・・加算代入 -=・・・減算代入 *=・・・乗算代入 /=・・・除算代入 %=・・・剰余代入 ++・・・インクリメント --・・・デクリメント
  • 関係演算子について
      ==・・・等しい !=・・・等しくない >・・・より大きい <・・・より小さい >=・・・より大きいか等しい <=・・・より小さいか等しい
  • 論理演算子について
      &・・・論理積 |・・・論理和 ^・・・排他的論理和 !・・・否定 &&・・・論理積(ショートカット) ||・・・論理和(ショートカット)

  • インクリメント演算子について
      ++(インクリメント演算子) 変数に代入されている値に 1 プラスする プラスの間にスペースを入れては行けない。 変数の前後におけるが、その位置によって演算のタイミングが違う。 後ろにおく(i++)と変数の値が式の中に使われた後、インクリメントされる 前におく(++i)とインクリメントした後、変数の値が式の中で使われる。
  • デクリメント演算子について
      --(デクリメント演算子) 変数に代入されている値に1マイナスする。 マイナスの間にスペースを入れては行けない。 変数の前後におけるが、その位置によって演算のタイミングが違う。 後ろにおく(i--)と変数の値が式の中に使われた後、デクリメントされる。 前におく(--i)とデクリメントした後、変数の値が式の中で使われる。
  • 補足3
  • 算術演算子

    演算子 説明
    + 加算
    - 減算(単項マイナス)
    * 乗算
    / 除算
    % 剰余
    += 加算代入
    -= 減算代入
    *= 乗算代入
    /= 除算代入
    %= 剰余代入
    ++ インクリメント
    -- デクリメント

    関係演算子

    演算子 意味
    == 等しい
    != 等しくない
    > より大きい
    < より小さい
    >= より大きいか等しい
    <= より大きいか等しい

    論理演算子

    演算子 動作 説明
    & 論理積

    AND。2つの項が真のときにだけ結果が真となる論理演算

    | 論理和 OR。2つの項が偽のときにだけ結果が偽となる論理演算
    ^ 排他的論理和 Excusive OR。2つの項が異なるときにだけ結果が真となる論理演算
    ! 否定 Not。項の真偽が逆になる論理演算
    && 論理積(ショートカット)  
    || 論理和(ショートカット)  
    == 等しい  
    != 等しくない  

  • 参考資料
  • ジョゼフ=オニール著 独習Java第3版 (翔永社)

    (参考ページ)

  • 感想
  • 今回は解析・考察する内容が非常に多かった。これだけの量(これから習う事も含めて)を全部使えるようになるには、何度も繰り返す必要があると思う。これからも頑張っていきたい。