プログラミング2 Java
課題
Javaの文法解説I{~11/15(Mon)}
講義資料を参考に、その範囲のJavaの基礎的な文法について教科書と対応させな がら解説し、考察せよ。

[1]算術演算子
 コメント

プログラム
/*
 *
 *コメント
 *
 */
public class rep3A {
      public static void /*これもコメント*/ main(String[] args) {
             System.out.println("算術演算子");             //これもコメント

             int a, b, c;                                  //a, b, cをそれぞれ初期化

             a = 100;                                      //a = 100を代入。
             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をここで直接計算し、計算結果を出力する。
			}
 }


実行結果


100
a = 100
30
b = 30
130
a+b = 130
130
70
a-b = 70
70
3000
a*b = 3000
3000
3
a/b = 3
3
10
a%b = 10
10


コメントについて

 コメントとは自分自身(または他のプログラマ)のためにソースコード内に書
き込むメモのこと。コンパイラはすべてのコメントを無視する。コメントはプロ
グラマのためだけに存在し、あとからソースコードの機能や使用方法を思い出す
ことができるように、その意味と目的を説明しておくために使用する。

             System.out.println("算術演算子");       //これもコメント

 「//」ではじまり、その行以降の文字が行末尾までコメントとして解釈される。

/*これはコメント*/

        
/*
  これも
 コメント
 だよ。
*/

 このコメントは「/*」ではじまり、「*/」で終わる。

/**
  これはJavaの
 ドキュメンテーション
 コメント。
*/

  これはドキュメンテーションコメント。このコメントは「/**」という3文字
ではじまり、「*/」という2文字で終わる。
 ドキュメンテーションコメントの利点は、ツールを使ってソースファイルから
コメントを抜き出し、そのプログラムのマニュアルを自動的に作成することが
できる。


算術演算子とは・・・

 ようは足し算の + や、引き算の - のこと。次の12種類がある。

算術演算子
演算子 説明
+ 加算
- 減算(単項マイナス)
* 乗算
/ 除算
% 剰余
+= 加算代入
-= 減算代入
*= 乗算代入
/= 除算代入
%= 剰余代入
++ インクリメント
-- デクリメント
[2]基本データ型

プログラム

public class rep3B {
 
       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



基本データ型とは・・・

 整数値に使うshort型、int型、double型、浮動小数点数に使うflort型、文字
列に使うstring型等様々あり、それぞれの値に適した型を使用しなければならな
い。

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


[3]繰り返し処理

プログラム

public class rep3C {

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


実行結果


文字= 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



 for ステートメントとは・・・
 
             for (i=1; i<=5; i++)                                 
	     System.out.println("i=" + i);

 まずループ制御変数 i に初期化として 1 を設定。次に式 i<=5 が評価される。
この結果は真となるため for ループが開始される。その値を表示した後、 i は
インクリメントされ、条件テストが再び評価される。このプロセスが繰り返され
て i が6に達すると for ループは停止する。


[4]条件処理

プログラム

public class rep3D {
        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以上です



 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]関係演算子

プログラム

public class rep3E {
        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つ以上の値の大小関係を示す演算子である。これは 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]論理演算子

プログラム

public class rep3F {
        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、ではない


論理演算子とは・・・

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

論理演算子の種類
演算子 動作 説明
& 論理積 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]インクリメント/デクリメント演算子
 while ループ

プログラム

public class rep3F {
        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


インクリメント/デクリメント演算子とは・・・

 インクリメント演算子( n++, ++n )は値 n を1ずつ加算していく。それに対して
デクリメント演算子( n--, --n )は値 n を1ずつ減算していく。


while ループとは・・・

        n = 5;
        while (--n >= 0) {
            System.out.println("n=" + n);

 ()内の条件式(ここでは --n >= 0 )が偽になるまで、 whike 文中の文(こ
こでは System.out.println("n=" + n); )が繰り返し実行される。




感想
 簡単そうでやたら時間がかかってしまった。でもこういう基礎的なところを僕
は中途半端なまま頭に入れていて、今回それをしっかりと知識に入れることがで
きたのでとてもよかった。できればこのような課題は前期のC言語のときに出し
てほしかった。
 あと HTML の知識も少しつけることができたのもよかった。


参考文献

独習 Java 第2版   ジョセフ・オニール 著
           トップスタジオ 訳
           武藤 健志 監修