プログラミング2 レポート3           055730H  新垣大志
[1]課題
講義資料を参考に、その範囲のJavaの基礎的な文法について教科書と対応させながら解説し、考察せよ。




[2]プログラムと実行結果


プログラム


public /*これもコメントです*/ class Test01 {    // Test01.java
    public static void main(String args[]) {   // mainの記述
        System.out.println("コメント");
        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() {                
        System.out.println("My first Java.");  // 文字列出力する
    }

    public static void smp1() {                
        System.out.print("AAAAA");             // printとprintlnのちがいのテスト、および
        System.out.print("BBBBB¥nCCCCC¥n");    // ¥nによる改行のテスト
        System.out.println("DDDDD");
        System.out.println("EEEEE¥nFFFFF¥n¥nGGGGG");
    }

    public static void smp2() {                
        int a, b, sum;                         // 3つの整数型変数の宣言
        
        a = 100;
        b = 200;
        sum = a + b;
        System.out.print("a=");              // "で囲まれているので文字列a=として表示
        System.out.println(a);               // 数値だけ出力
        System.out.println("b=" + b);        // +は連結演算子、2つの文字列を連結する。
        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++)                   // for文で5回ループする
            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)                         // if文で条件をだす
                System.out.println(" 3未満です");
            else
                System.out.println(" 3以上です");
        }
    }

}

実行結果
コメント
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つの種類がある。
 「//」単一行コメント    //で始まり、それから行末までをコメントとして認識する。
 「/* */」複数行コメント  /*で始まり、*/で終わる。中に書き込まれた文をコメントとして認識する。
 「/**」「*/」
     ドキュメンテーションコメント
               /**で始まり、*/で終わる。このドキュメンテーションコメントはjavadocという
               ツールをつかい、コメントを抜き出すことができる。

 コメント文をつかうときに注意すること
  コメントのなかにコメントをいれることはできない。
  メソッドや変数名の間にコメントをいれることはできない。



for文とif文
 forをつかって命令を繰り返し実行することができる。一般的な形式は
   for(a;b;c) statement; となる。
 statementにかかれた命令文を繰り返す。
 複数の命令文からなる場合、ステートメントをブロックで囲む。
 このときaにはいるのが初期値、bは目標値、cはインクリメントまたはデクリメントを指定する。
  「a」初期値  forループが開始するときに1回のみ実行される。ループを制御する変数の初期値を設定する。
  「b」目標値  ループが繰り返されるたびに実行される。ここで設定した目標値と制御変数を比較して、
          その結果が「真」であったらループを続行する。「偽」であったらループを停止して、for文の次のコードに移る。
  「c」インクリメント
          ループを制御する変数を一定量ずつ増やす(インクリメント)または減らす(デクリメント)。
          ループの最後に実行され、ループが繰り返されるたびに実行される。

プログラム


public class Test02 {                  // Test02.java
    public static void main(String args[]) {
        char    ch;                    // 文字を格納する
        boolean bdt;                   // 真(true)または偽(false)のどちらかの値をもたせる
        int     idt;                   // 整数値を格納する
        long    ldt;                   // 整数値を格納する 最大範囲
        float   fdt;                   // 小数点数
        double  ddt;                   // 小数点数 最大精度
        String  ss;                    // 文字列を格納
        final int CNST1 = 1234;      // 上書きできない変数

        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.4567F;              // 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);
    }
}

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

~考察~
データ型

Javaの基本のデータ型
説明 範囲
char 16ビットのキャラクタデータ(文字) 1つのUnicode文字
boolean 真または偽  
byte 8ビット符号付き整数 -128~127
short 16ビット符号付き整数 -32768~32767
int 32ビット符号付き整数 -2147483648~2147483647
long 64ビット符号付き整数 -9223372036854775808~9223372036854775807
float 32ビット符号付き小数点数  
double 64ビット符号付き小数点数  



エスケープ
 「'」(1重引用符)や「"」(2重引用符)、「\」(バックスラッシュ)などをprintlnの引数として表示させようとしても
  エラーがでて、プログラムを実行できない。この問題の対処方法は¥のあとにつづけてそれらの文字を打つこと。例えば、
 「\'」「\"」「\\」のようにかけば、引数として定義できる。
 文字をにがすようにしてかくからこのことを「エスケープ」という。


final
 final定数とははじめに定義した値を変更できない定数。つまり、1度代入した値は上書きできない

final定数を考察するプログラム
  public class Repo3_final {

	public static void main(String[] args) {
		int k = 8;       //
		k = 3;           // kの値を変更
		System.out.println("k = " + k); // kの値を表示
	}
}
  
このプログラムの実行結果は「k = 3」となるが、kをfinal定数とするつぎのプログラムは、
  public class Repo3_final {

	public static void main(String[] args) {
		final int k = 8;         // kをファイナル定数とする
		k = 3;
		System.out.println("k = "+ k); // kを表示
	}
}
  
実行結果
  Exception in thread "main" java.lang.Error: コンパイル問題が未解決です。 
	final のローカル変数 k を割り当てることができません。ブランクでなければならず、複合割り当てを使用することはできません。

	at Repo3_final.main(Repo3_final.java:13)
  
となってエラーになる。finalは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++) {                         //for文を用いたループ
            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); //逆にカウントしていく
        }
    }

}

実行結果
算術演算子
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

~考察~


算術演算子
算術演算子 n=5, m=2;
演算子 説明
+
加算
n+m= 7
-
減算
n-m= 3
*
乗算
n*m= 10
/
除算
n/m= 2
%
剰余
n/m= 1



関係演算子
 2つの演算を比較し、その関係が真か偽かにより真または偽となる演算子。
関係演算子
演算子 説明
== 等しい
i == i
!= 等しくない
i != i
> より大きい
i > j
< より小さい
i < j
>= より大きいか等しい
i >= j
<= より小さいか等しい
i <= j



論理演算子
 2つの演算数について論理演算を行い、真または偽を返す演算子。
演算子 動作 説明
& 論理積 2つの項が真のときに結果が真になる
| 論理和 2つの項が偽のときに結果が偽になる
^ 排他的論理和 2つの項が異なるときに結果が真になる
! 否定 項の真偽が逆になる



インクリメント演算子/デクリメント演算子
 インクリメントとは変数の値をひとつずつ増やす演算子で、
  n++ のようにかいて、
  n = n+1 と同じ役割をもつ。
 デクリメントは変数の値をひとつずつ減らす演算子で、
  n-- とかいて
  n = n-1 と同じ働きをする。


while
 whileもループのひとつで、
  「while (a) statement;」の形式でつかう。
 ()のなかにある式が真である限り、ループを繰り返すという動作をする。
 for文のようにインクリメントを指定することができないので、whileではステータスメントの終わりに、
 インクリメントまたはデクリメントを指定して制御定数を調整するなどしなくてはならない。





[3]反省と感想
今回のレポートでまとめたところは、C言語でもやった分野なので理解しやすかった。
htmlでのレポート作成も慣れてきたと感じた。しかし、他のひとのレポートは
もっと凝っている作りになっているので参考にしてよりいいレポートにしたい。




[4]参考文献
ジョゼフ・オニール 著 「独習Java 第3版」




もどる