Report#3


    1.課題

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

    2.解答及び考察

    1.解答

    Javanの基礎的な文法について考察するために、次のプログラムを作成した。

    (1)sample1.java
    ソースコード
    /* * *コメント * */ public class sample1 { public static void /*これもコメント*/ main(String[] args) { System.out.println("算術演算子"); //これもコメント int a, b, c; //a, b, cをそれぞれ初期化。 a = 10; //a に 10を代入。 System.out.println(a); //aの値を出力する。 System.out.println("a = " + a); //" "で囲んだ文字列を出力し、そのあとaの値を出力する。 b = 30; //b に 30を代入。 System.out.println(b); //bの値を出力する。 System.out.println("b = " + b); //" "で囲んだ文字列を出力し、そのあとbの値を出力する。 c = a + b; //c に a + bを代入。+ は加算演算子。 System.out.println(c); //cの値を出力する。 System.out.println("a+b = " + c); //" "で囲んだ文字列を出力し、そのあとcの値を出力する。 System.out.println(a+b); //a+bの計算結果を出力する。 c = a - b; //c に a - bを代入。- は減算演算子。 System.out.println(c); //cの値を出力する。 System.out.println("a-b = " + c); //" "で囲んだ文字列を出力し、そのあとcの値を出力する。 System.out.println(a-b); //a-bの計算結果を出力する。 c = a * b; //c に a * bを代入。* は乗算演算子。 System.out.println(c); //cの値を出力する。 System.out.println("a*b = " + c); //" "で囲んだ文字列を出力し、そのあとcの値を出力する。 System.out.println(a*b); //a*bの計算結果を出力する。 c = a / b; //c に a / bを代入。/ は除算演算子。 System.out.println(c); //cの値を出力する。 System.out.println("a/b = " + c); //" "で囲んだ文字列を出力し、そのあとcの値を出力する。 System.out.println(a/b); //a/bの計算結果を出力する。 c = a % b; //c に a % bを代入。%は剰余演算子。 System.out.println(c); //cの値を出力する。 System.out.println("a%b = " + c); //" "で囲んだ文字列を出力し、そのあとcの値を出力する。 System.out.println(a%b); //a%bの計算結果を出力する。 } }

    実行結果
    算術演算子
    10
    a = 10
    30
    b = 30
    40
    a+b = 40
    40
    -20
    a-b = -20
    -20
    300
    a*b = 300
    300
    0
    a/b = 0
    0
    10
    a%b = 10
    10
    

    2.考察

    1.コメントについて
    
    ・コメントとは自分自身(または他のプログラマ)のためにソースコード内に書
      き込むメモのこと。コンパイラはすべてのコメントを無視する。コメントは
      プログラマのために存在し、あとからソースコードの機能や使用方法を思い
      出すことができるように、その意味と目的を説明しておくために使用する。
    
    ・//コメント
     このコメントは"//"から行末尾までコメントと解釈される。
    
    ・/*コメント*/
      このコメントは"/* */"で囲まれた部分がコメントと解釈される。
     /*~~~~~~~~~~
        ~~~~~~~~~~
        ~~~~~~~~~~
      */
     このように複数行でもよい
    
    ・/**コメント*/
      このコメントはドキュメンテーションコメント。"/**  */"で囲まれた部分が
     コメントと解釈される。ドキュメンテーションコメントの利点は、ツールを
     使ってソースファイルからコメントを抜き出し、そのプログラムのマニュアル
     を自動的に作成することができる。
    
    2.算術演算子について
    
    ・算術演算子とは、足し算や引き算などのこと。算術演算子にはつぎのようなものがある。
    

    算術演算子
    演算式説明
    + 加算
    - 減算
    * 乗算
    / 除算
    % 剰余
    += 加算代入
    -= 減算代入
    *= 乗算代入
    /= 除算代入
    %= 剰余代入
    ++ インクリメント
    -- デクリメント


    (2)sample2.java
    ソースコード
    public class sample2 { public static void main(String[] args){ char ch; //char型変数 ch を宣言 ch = 'A'; //変数 ch の初期化 System.out.println("文字=" + " code=" + (int)ch); ch = '亜'; System.out.println("文字=" + ch + " code=" + (int)ch); boolean bdt; //boolean型変数 bdt を宣言 bdt = true; //変数 bdt を初期化 System.out.println("bdt = " + bdt); int idt; //int型変数 idt を宣言 idt = 1234567890; //変数 idt の初期化 System.out.println("idt = " + idt); long ldt; //long型変数 ldt を宣言 ldt = 1234567890123456789L; //変数 ldt を初期化 System.out.println("ldt = " + ldt); float fdt; //float型変数 fdt を宣言 fdt = 123.456F; //変数 fdt を初期化 System.out.println("fdt = " + fdt); double ddt; //double型変数 ddt ddt = 123.456789012345; //変数 ddt を初期化 System.out.println("ddt = " + ddt); idt = 022; //変数 idt を初期化 System.out.println("8進22 = " + idt); idt = 0x22; //変数 idt を初期化 System.out.println("16進22 = " + idt); ddt = 5.67e4; //変数 ddt を初期化 System.out.println("指数 = " + ddt); ch = '\n' ; //変数 ch を初期化 System.out.println("改行文字コード = " + (int)ch); String ss; //String型変数 ss を宣言 final int CNST1 = 1234; //final定数 ss = "AAAA\tBBBB"; //変数 ss を初期化 System.out.println("ss = " + ss); System.out.println("CNST1 = " + CNST1); } }

    実行結果
    文字= code=65
    文字=亜 code=20124
    bdt =  true
    idt = 1234567890
    ldt = 1234567890123456789
    fdt = 123.456
    ddt = 123.456789012345
    8進22 = 18
    16進22 = 34
    指数 = 56700.0
    改行文字コード = 10
    ss = AAAABBBB
    CNST1 = 1234
    

    2.考察

    1.基本データ型について
    
    ・基本データ型には、整数値に使うshort型、int型、double型、浮動小数点に使うfloat型、
     文字列に使うstring型などがある。基本データ型について、表にまとめてみた。
    

    符号付整数
    基本データ型の種類
    型名ビット数表現できる範囲分類
    byte 8 -128 ~ 127
    short 16 -32768 ~ 32768
    int 32 -2の31乗 ~ 2の31乗-1
    long 64 -2の63乗 ~ 2の63乗-1
    char 16 文字(整数型)
    float 32 ±3.40282347E+38 ~ ±1.4023984E-45 浮動小数点数型
    float 32 ±1.79769313486231570E+308 ~ ±4.94065645841246544E-324 浮動小数点数型
    boolean 1 true/false 論理値型



    (3)sample3.java
    ソースコード
    public class sample3 { public static void main(String[] args) { int i, sum; //int型変数i,sumの宣言。 for (i=1; i<=5; i++) //for文 System.out.println("i=" + i); sum = 0; //変数 sum の初期化 for (i=1; i<=5; i++) { sum = sum + i; System.out.println("sum=" + sum); } } }

    実行結果
    i=1
    i=2
    i=3
    i=4
    i=5
    sum=1
    sum=3
    sum=6
    sum=10
    sum=15
    

    2.考察

    1.forステートメントについて
    
    ・for (i=1; i<=5; i++)
     System.out.println("i=" + i);
    
     このforステートメントは、まず変数iに1を代入しiの値を出力。
     そして、iが5以下のときはiに1を足してiのn値を出力するという
     ことを繰り返す。
    
    ・ sum = 0;
       for (i=1; i<=5; i++) {
       sum = sum + i;
       System.out.println("sum=" + sum);
    
      このforステートメントは、まず変数sumに0を、変数iに1を代入し、
      sum + i の値を出力。そしてiが5以下のときはiに1を足してから、
      sum + i の値を出力するということを繰り返す。
      すなわち、最初はsum = 0 で i = 1 であるから、出力される値は
      0 + 1 で1、次はsum = 1 で i = 2 であるから、出力される値は
      1 + 2 で3、という風になる。
    



    (4)sample4.java
    ソースコード
    public class sample4 { public static void main(String[] args) { 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以上です"); } } }

    実行結果
    i=1 3未満です
    i=2 3未満です
    i=3 3以上です
    i=4 3以上です
    i=5 3以上です
    

    2.考察

    1.if-elseステートメントについて
    
    ・if (i < 3)
           System.out.println(" 3未満です");
      else
           System.out.println(" 3以上です");
     
      ()内の条件式が真である場合には、 if の後ろのステートメント(ここでは
      System.out.println(" 3未満です");)が実行されelse部分は飛ばされる。
      逆に、条件式が偽になる場合には、if 部分が飛ばされ、elseの後ろのステートメント
     (ここではSystem.out.println(" 3以上です"); )が実行される。
    



    (5)sample5.java
    ソースコード
    public class sample5 { public static void main(String[] args) { 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ではない"); } } }

    実行結果
    --------1
    2未満
    3ではない
    --------2
    3ではない
    --------3
    3である
    --------4
    4以上
    3ではない
    --------5
    4以上
    3ではない
    

    2.考察

    1.関係演算子について
    
    ・関係演算子とは2つ以上の値の大小関係を示す演算子である。
     これは if 文などの条件式に用いてその真偽を問うのに使われる。
     関係演算子には次の6つがある。
    

    関係演算子の種類
    演算子 説明
    a < b aはbより小さい
    a > b aはbより大きい
    a <= b aはb以下
    a >= b aはb以上
    a == b aとbは等しい
    a != b aとbは等しくない



    (6)sample6.java
    ソースコード
    public class sample6 { public static void main(String[] args) { 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、ではない"); } } }

    実行結果
    --------1
    2未満または4より大
    --------2
    2以上かつ4以下
    1または3、ではない
    --------3
    2以上かつ4以下
    --------4
    2以上かつ4以下
    1または3、ではない
    --------5
    2未満または4より大
    1または3、ではない
    

    2.考察

    1.論理演算子について
    
    ・論理演算子には、論理積、論理和、排他的論理和、否定などがあり、下の真理値表が示すように各論理演算をサポートする。
    

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

    真理値表
    a b a&b a|b a^b !a
    0 0 0 0 0 1
    0 1 0 1 1 1
    1 0 0 1 1 0
    1 1 1 1 0 0



    (7)sample7.java
    ソースコード
    public class sample7 { public static void main(String[] args) { 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); } } }

    実行結果
    100
    200
    300
    100
    200
    300
    n=4
    n=3
    n=2
    n=1
    n=0
    

    2.考察

    1.インクリメント/デクリメント演算子について
    
    ・インクリメント演算子( n++, ++n )は値 n を1ずつ加算していく。それに対して
      デクリメント演算子( n--, --n )は値 n を1ずつ減算していく。
    
    2.whileループについて
    
    ・n = 5;
      while (--n >= 0) {
          System.out.println("n=" + n);
    
     ()内の条件式(ここでは --n >= 0 )が偽になるまで、 whike 文中の文
      (ここでは System.out.println("n=" + n); )が繰り返し実行される。
    



    3.感想
    今回の課題は時間がかなりかかった。内容的には、そこまで高度なことはなかったが、量が多かったので
    ホームページを作るのがいつもにも増して大変だった。HTMLについてもまだまだ未熟な知識しかないので
    課題を通して、HTMLについてもいろいろ学んでいくことになるだろうと思う。
    

    参考文献:独習Java 第3版
    

    戻る
    Wikiに戻る