Report#3


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


その1:基本的なルール
[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以上です");
        }
    }

}


[2]実行結果
コメント
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以上です



[3]考察
コメント
 Javaプログラムでは2つのコメントを使うことができる。まず1つは範囲型コメントである。プログラム中に/* があると次に*/に出会うまでのテキストはコメントと見なされる。この範囲型コメントは複数行にまたがっても かまわない。2つめは1行型コメントです。プログラムの中に"//"があるとそこから行末までがコメントになる。
文字列出力
 文字列出力メソッドはReport#1でも記述したSystem.out.print("")(文字列出力後改行しない)とSystem.out.println ("")(文字列出力後改行する)がある。""内の文字列中に¥nがあるとその位置で改行する。¥n¥nがあると 空白行になる。
変数宣言と数値出力
 int a, b, sum; で3つのint型の変数を宣言している。詳しくはデータ型の考察で。そしてaに100、bに200、sumにaとb を加算したものを入れる。あとはSystem.out.prinlntで出力。
繰り返し処理
 for文は変数が1から(i=1)、1ずつ増加して(i++)、5以下になるまで(i<=5)System.out.printlnを繰り返し実行。
条件処理
  もしiの値が3未満なら(if (i < 3))System.out.println(" 3未満です");を実行、そうでないときは(else) System.out.println(" 3以上です");を実行する。

その2:変数と定数
[1]プログラム

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定数


[3]考察
データ型
 変数を宣言する際、その変数の格納できるデータのサイズを示す「型」には以下のようなものがある。
データ型
説明
表現範囲
boolean 1bit 真偽値
trueまたはfalse
char 16bit Unicode文字
¥u0000~¥uFFFF
byte 8bit 符号付き文字
-128~127
short 16bit 符号付き文字
-32768~32767
int 32bit 符号付き文字
-2147483648~2147483647
long 64bit 符号付き文字
-9223372036854775808~9223372036854775807
float 32bit 浮動小数点
単精度の浮動小数点
double 64bit 浮動小数点
倍精度の浮動小数点

定数
 定数には数値定数、文字定数、文字列定数がある。int a; a = 12; でaは変数だが、12は定数である。定数は その名の通り「定まった数」を表現する。これは数値定数である。文字を'で囲むと文字定数になる。文字定数は それぞれの文字の持っている文字コードを表現する。また文字列を"で囲むと文字列定数になる。

その3:式と演算子
[1]プログラム

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);
        }
    }

}


[2]実行結果
算術演算子
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]考察
算術演算子
 算術演算子は数値を計算するもので、以下のようなものがある。
算術演算子
演算子
説明
使用例
+
加算
a = b + c;
-
減算
a = b - c;
*
乗算
a = b * c;
/
除算
a = b / c;
%
剰余
a = b % c;

関係演算子
 関係演算子は2つのオペランドの大小関係を比較するもので、以下のようなものがある。
関係演算子
演算子
説明
使用例
<
小さい
if (a < 10)
<=
小さいか等しい
if(a <= 10)
>
大きい
if(a > 10)
>=
大きいか等しい
if(a >= 10)
==
等しい
if(a == 10)
!=
等しくない
if (a != 10)

論理演算子
 論理演算子は真偽値を否定したり、複数の条件を組み合わせたりするときに使われ、以下の種類がある。
論理演算子
演算子
説明
使用例
!
否定
if (!flg)
&&
論理積(かつ)
if (10<a && a<20)
||
論理和(または)
if (a==2 || a==4)

インクリメント/デクリメント演算子
インクリメント/デクリメント演算子は、1加算、1減算を行う。
インクリメント/デクリメント演算子
演算子
説明
使用例
++
1加算
++a; または a++;
--
1減算
--a; または a--;

反省・感想、参考文献
反省・感想
 今回のレポートはプログラムを考えずにサンプルプログラムをそのままのせてその考察をしました。考察も考えている うちに「あ、C言語に似てる」と思うところがたくさんあって結構内容は簡単でした。でも、すこし量があったせいか またギリギリまでかかってしまいました。あとはテーブルの挿入やカラーなどを今までのレポートより多く使ってみました。 まだしょぼいですけど。htmlの勉強にもなったレポートでした。次のレポート早くやらないと!

参考文献
 独習Java 第2版     ジョゼフ・オニール 著
                トップスタジオ 訳
                武藤 健志 監修
 新Java言語入門ビギナー編  林 晴比古 著