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

ソース1

    プログラム1
 1        public /*これもコメントです*/ class Report3a {    //
 2         Report3a.java
 3            public static void main(String args[]) {   // mainの記述
 4                System.out.println("コメント");
 5                cmnt();                                // cmntスレッド
 6        の呼び出し
 7                System.out.println(¥n¥n文字列出力");
 8                smp1();
 9               System.out.println("¥n¥n変数宣言と数値出力");
10                smp2();
11                System.out.println("¥n¥n繰り返し処理");
12                smp3();
13                System.out.println("¥n¥n条件処理");
14                smp4();
15            }
16
17            public static void cmnt() {                // mainの記述
18                System.out.println("My first Java.");  // 文字列出力す
19                る
20            }
21
22            public static void smp1() {
23                System.out.print("AAAAA");
24                System.out.print("BBBBB¥nCCCCC¥n");
25                System.out.println("DDDDD");
26                System.out.println("EEEEE¥nFFFFF¥n¥nGGGGG");
27                System.out.println("HHHHH" + "IIIII");
28            }
29
30            public static void smp2() {
31                int a, b, sum;
32        
33                a = 100;
34                b = 200;
35                sum = a + b;
36                System.out.print("a=");              // 文字列だけ出力
37                System.out.println(a);               // 数値だけ出力
38                System.out.println("b=" + b);        // 文字列と数値を
39                出力
40                System.out.println("a+b=" + sum);    // 結果を出力
41                System.out.println("a+b=" + (a+b));  // 直接計算させる
42            }
43
44            public static void smp3() {
45                int i, sum;
46        
47                for (i=1; i<=5; i++)
48                    System.out.println("i=" + i);
49
50                sum = 0;
51                for (i=1; i<=5; i++) {
52                    sum = sum + i;
53                    System.out.println("sum=" + sum);
54                }
55            }
56
57            public static void smp4() {
58                int i;
59
60                for (i=1; i<=5; i++) {
61                    System.out.print("i=" + i);
62                    if (i < 3)
63                        System.out.println(" 3未満です");
64                    else
65                        System.out.println(" 3以上です");
66                }
67            }
68
69        }


実行結果
        コメント
        My first Java.


        文字列出力
        AAAAABBBBB
        CCCCC
        DDDDD
        EEEEE
        FFFFF

        GGGGG
        HHHHHIIIII


        変数宣言と数値出力
        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行目について:クラスの定義。

 
public:Test01クラスの外部からこのコードの呼び出すことができることを示す
    アクセス指定子です。
class :javaプログラムではその処理を1つ以上のクラス内で行う。
    よってjavaプログラム内では最低1つのクラスを指定しなければ
    ならない。ここでは"Test01"と言うクラスを指定している。
コメント:
        コメントとは、自分や他のプログラマーのためにソースコード内に書き込むメモの事。
        コンパイラはすべてのコメントを無視する。
        コメントは後からソースコードの機能や使用方法を思い出す事ができるように、その意味と目的を説明しておくために使用する。
        Javaのコメントには3とおりの形式がある。
1.単一行コメント
        //ではじまり、その行以降の文字が行末尾までコメントとして解釈される。
     例
        int i = 10; // iはカウンタとして使用する
2.複数行コメント
        /*ではじまり、*/で終わる。
     例 
        /*
          これは、
          5行にわたる
          長いコメント。
        */
3.ドキュメンテーションコメント
        /**という3文字ではじまり、*/という2文字で終わる。
     例 
        /**
          これはJavaの
          ドキュメンテーション
          コメント。
        */

・2行目について:main()メソッド。

 
static:この関数がTest01クラスのインスタンスではなくTest01クラス自体に
    関連づけられたものである事を示す。
void :この関数に返り値がない事を示す。

String args[]:main関数の引数である。ここでは使用しない。

・3〜12行目について:printlnメソッドと関数呼び出し。

cmnt();,smp1();,smp2();
smp3();,smp4();,    :各名前の 後に処理方法が定義されている
               関数(スレッド)を呼び出している。

・15〜24行目について:printlnメソッドと、printメソッド

 
1.println:引数に渡された文字列を出力し、文末に改行文字が自動出力される。
2.print  :引数に渡された文字列を出力し、文末に改行文字が出力されない。

・25〜36行目について:式の値の出力

print("~~"+X):
          "~~"の中身を出力した後に関数Xの値を出力する。
       Xは関数だけでなく、関数を含んだ四則演算でも良い。
        "~~"を記述せずにXだけを引数に指定すると
        Xの値のみを出力する。

・37〜49行目について:繰り返し処理

繰り返し処理について
Javaには3種類のループステートメントがそのうちの1つがforステートメント。
for(初期状態; 終了条件; 継続処理) {
  ステートメント;
}
        「初期状態」は1回しか実行されず、その後にループが開始される。
        「終了条件」では普通、ループ制御変数と目標値を比較する。
        「終了条件」の評価結果が真の場合はループが繰り返され、偽になるとループは停止し、ループの後に続くコードに制御が移る。
        「終了条件」は、ループの開始時とループが繰り返されるたびに、ループの最初に実行される。        
        「継続処理」はループの最後に実行される。
        つまり、ループ本体の「ステートメント」がすべて実行された後で実行される。
        「継続処理」の典型的な用途は、ループ制御変数の値を一定量ずつ増やすこと(あるいは減らすこと)。

・50〜61行目について:条件処理

条件処理:
        ifステートメントは、Javaの選択ステートメント(条件ステートメン
        トとも呼ばれる)の1つ。
        ifにelseステートメントを追加することが出来る。
if (条件式1){
   ステートメント 1;
}
else if (条件式2){
   ステートメント 2;
}
else if (条件式3){
}
   ステートメント 3;
}
else{
   ステートメント 4
}
        構文は上記のようになり、条件式1が真である場合は、ステートメント1を実行する。
        条件式1が偽で条件式2が真の場合はステートメント2を実行する。
        条件式1・2ともに偽で条件式3が真の場合はステートメント3を実行する。
        すべての条件式が偽の場合はステートメント4を実行する。
        このような形で複数の条件分岐が可能となる。




プログラム2 1 public class Report3b { // Report3b.java 2 public static void main(String args[]) { 3 char ch; 4 boolean bdt; 5 int idt; 6 long ldt; 7 float fdt; 8 double ddt; 9 String ss; 10 final int CNST1 = 1234; // final定数 11 12 ch = 'A'; // 半角文字 13 System.out.println("文字=" + ch + " code=" + (int)ch); 14 ch = '亜'; // 全角文字 15 System.out.println("文字=" + ch + " code=" + (int)ch); 16 17 18 bdt = true; 19 System.out.println("bdt = " + bdt); 20 21 idt = 1234567890; 22 System.out.println("idt = " + idt); 23 24 ldt = 1234567890123456789L; // Lはlong値を示す 25 System.out.println("ldt = " + ldt); 26 27 fdt = 123.456F; // Fはfloat値を示す 28 System.out.println("fdt = " + fdt); 29 30 ddt = 123.456789012345; 31 System.out.println("ddt = " + ddt); 32 33 idt = 022; // 8進数の22 34 System.out.println("8進22 = " + idt); 35 36 idt = 0x22; // 16進数の22 37 System.out.println("16進22 = " + idt); 38 39 ddt = 5.67e4; // 指数表現の56700 40 System.out.println("指数 = " + ddt); 41 42 ch = '¥n'; // エスケープ文字 43 System.out.println("改行文字コード = " + (int)ch); 44 45 ss = "AAAA¥tBBBB"; // 文字列定数(エスケープ 46 文字を含む) 47 System.out.println("ss = " + ss); 48 49 System.out.println("CNST1 = " + CNST1); 50 } 51 } 実行結果 文字=A 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 = AAAA BBBB CNST1 = 1234

考察

変数の基本データ型: 型 説明 char 16ビットUnicodeキャラクタデータ boolean 真偽値 byte 8ビット符号付き整数 syort 16ビット符号付き整数 int 32ビット符号付き整数 long 64ビット符号付き整数 float 32ビット符号付き浮動小数点 double 64ビット符号付き浮動小数点 変数宣言前に指定できる修飾子: キーワード 意味 final 定数として使える変数 private 同じクラスのコードからしかアクセスできない変数 protected サブクラスまたは同じパッケージ内のコードからしかアクセスできない変数 public ほかのクラスからアクセスできる変数 static インスタンス変数ではない変数 transient クラスの永続的な状態の一部ではない変数 volatile 不意に値が変更されることがある変数 8進数と、16進数: 8進数は0からはじまり、16進数は0xまたは0Xではじまる。 x8進数の22 022 16進数の22 0x22 float型: 小数点または指数を含んだ数値リテラルは、double型と見なされる。 float型の値を表すには、サフィックスとして「F」または「f」を明示する。
プログラム3 1 public class Report3c { // Report3c.java 2 public static void main(String args[]) { 3 System.out.println("算術演算子"); 4 comp1(); 5 System.out.println("¥n¥n関係演算子"); 6 comp2(); 7 System.out.println("¥n¥n論理演算子"); 8 comp3(); 9 System.out.println("¥n¥nインクリメント/デクリメント 10 演算子"); 11 comp4(); 12 } 13 14 public static void comp1() { 15 int a, b, c; 16 double f, g, h; 17 18 a = 100; System.out.println("a = " + a); 19 b = 30; System.out.println("b = " + b); 20 c = a + b; System.out.println("a+b = " + c); // 加算 21 c = a - b; System.out.println("a-b = " + c); // 減算 22 c = a * b; System.out.println("a*b = " + c); // 乗算 23 c = a / b; System.out.println("a/b = " + c); // 整数 24 除算 25 c = a % b; System.out.println("a%b = " + c); // 整数 26 剰余 27 28 f = 90.0; System.out.println("f = " + f); 29 g = 40.0; System.out.println("g = " + g); 30 h = f / g; System.out.println("f/g = " + f/g); // 浮動 31 小数点数除算 32 } 33 34 public static void comp2() { 35 int a; 36 for (a=1; a<=5; a++) { 37 System.out.println("--------" + a); 38 if (a < 2) System.out.println("2未満"); 39 if (a >= 4) System.out.println("4以上"); 40 if (a == 3) System.out.println("3である"); 41 if (a != 3) System.out.println("3ではない"); 42 } 43 } 44 45 public static void comp3() { 46 int a; 47 48 for (a=1; a<=5; a++) { 49 System.out.println("--------" + a); 50 if (a>=2 && a<=4) 51 System.out.println("2以上かつ4以下"); 52 if (a<2 || a>4) 53 System.out.println("2未満または4より大"); 54 if (!(a==1 || a==3)) 55 System.out.println("1または3、ではない"); 56 } 57 } 58 59 public static void comp4() { 60 int dt[] = {100, 200, 300}; // 配列を確保 61 int n; 62 63 // ++演算子を使わないときの記述 64 n = 0; 65 System.out.println(dt[n]); // dt[0]を表示 66 n = n +1; 67 System.out.println(dt[n]); // dt[1]を表示 68 n = n +1; 69 System.out.println(dt[n]); // dt[2]を表示 70 71 // ++演算子を使ったときの記述 72 n = 0; 73 System.out.println(dt[n++]); // dt[0]を表示 74 System.out.println(dt[n++]); // dt[1]を表示 75 System.out.println(dt[n++]); // dt[2]を表示 76 77 // --演算子を使う 78 n = 5; 79 while (--n >= 0) { // n回繰り返す 80 System.out.println("n=" + n); 81 } 82 } 83 84 } 実行結果 算術演算子 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

考察

算術演算子について: 演算子 説明 + 加算 - 減算(単項マイナス) * 乗算 / 除算 % 乗余 += 加算代入 -= 減算代入 *= 乗算代入 /= 除算代入 関係演算子について: 演算子 意味 例 == 等しい i==j != 等しくない i!=j > より大きい i>j < より小さい i<j >= より大きいか等しい i>=j <= より小さいか等しい i<=j 論理演算子について: 演算子 動作 説明 & 論理積 AND。2つの項が真のときに だけ結果が真となる論理演算 | 論理和 OR。2つの項が偽のときにだ け結果が偽となる論理演算  ^ 排他的論理和 Exclusive OR。2つの項が 異なるときにだけ結果が真となる論理演算 ! 否定 NOT。項の真偽が逆になる論 理演算 && 論理積(ショートカット) || 論理和(ショートカット) == 等しい != 等しくない インクリメント/デクリメント演算子について 演算子 説明 ++ インクリメント -- デクリメント int i, j; i = 10; j = i++; 上記の文は、jにiの値を入れた後に、iの値を1増やす。jの値は10。

感想

    今週は少し事情があり時間がなかった。
        また、今回のレポートは調べることが多くて、時間がかかった。
        しかし、基本的なことはC言語と似ていたので分かり易かった。
        次はまとめ方をもう少し工夫しようと思う。

参考文献・URL

        独習Java 第2版    ジョゼフ・オニール 著