Report#3


学籍番号:055704J
氏 名 :伊志嶺拓人


■プログラム

public /*これもコメントです*/ class Report3_sample1 {   
    public static void main(String args[]) {   
        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以上です");
        }
    }

}

■実行結果

コメント
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以上です

■考察

●Javaの基本


・中カッコ
「{」「}」で囲むと、文をまとめてグループ化することができます。これをコードブロックと呼びます。

・セミコロン
Javaでは文を「;(セミコロン)」で区切ります。セミコロンまでは、改行などがあっても文の途中だとみなされます。

・改行・空白
改行やタブ文字、半角スペースは、いくつあっても単なる区切りとして扱われま す。

・インデント
インデントとは段落単位で行の開始位置や終了位置を決めて揃えることです。
「{」「}」の対応関係がわかるように、コードブロックはインデントして見やすくなるようにします。
Javaでは「{」は独立した行にせずに、文末に置く形が標準的に使われています。「}」は独立した行にします。

・変数
変数にはプログラム中で値を割り当てることができます。
Javaでは変数に割り当てることのできる値の種類を宣言しておく必要があります。

教科書P.29~30

●コメント


・コメントとは、自分自身や他のプログラマのためにソースコード内に書き込むメモのことです。
・コンパイラはすべてコメントを無視します。
・コメントは、プログラマのためだけに存在し、ソースコードの意味と目的を説明しておくために使用します。
・Javaのコメントには3種類あります。

1,単一行コメント


表記法 特徴
 // これはコメント
"//"からその行を改行するまでがコメント部分となります。

2,複数行コメント


表記法 特徴
      
 /*これはコメント*/
 /*これは
   3行にわたる 
 */長いコメント
"/*"で始まり"*/"で終わるコメントです。複数行に渡って書く事が出来ます。

3,ドキュメンテーションコメント


表記法 特徴
  
  /**
    これはJavaの
  ドキュメンテーション
  コメントです。
 */
"/**"で始まり"*/"で終わるコメントです。
このコメント形式は、javadoc というドキュメンテーションツールの為のものです。
ドキュメンテーションコメントが記述されたソースを javadoc に読み込ませると、API 文書形式の HTML 文書が自動的に出力されます。

・Java では、キーワードやクラス、メソッド、変数名の中を除いて、任意の場所にコメントを記述することができます。
例えば、
  public/*コメント*/static void main (String [] args){ 
のように単語の間に記述したり
System.out/*コメント*/.println("コメントのテスト");  
 のようにメソッドの式の中でも記述できます。ビックリ!
 しかし、
Sys/*コメント*/tem.out.println("コメントのテスト");
 のように単語を分裂させるような記述は出来ません。残念!
 /*1つ目のコメント/*2つ目のコメント*/ ←ここでコメント終了と判断 */ ←エラーになる  このように複数行コメントを入れ子状にして使うことも出来ません。

教科書P.98~100

●バックスラッシュコード(エスケープシーケンス)


・Java言語には特殊な文字コードが定義されています。
・これらはキーボードから直接入力出来ない文字、印字不可能な文字、
・一部の文字セットにしか存在しない文字、特殊な目的で使われる文字などいろいろです。
・これらの記号は先頭に円記号(\)を付けて表し、バックスラッシュコードと呼ばれます。
・バックスラッシュコードは通常の文字が使える所なら何処でも使う事ができま す。

バックスラッシュコード
コード 意味
\b バックスペース
\n 改行
\r キャリッジリターン
\f フォームフィード
\t 水平タブ
\" 二重引用符
\' 一重引用符
\0 null値
\\ バックスラッシュ
\N 八進定数(N = 0〜7)
\NN 八進定数(N = 0〜7)
\MNN 八進定数(M = 0〜3、N = 0〜7)
\uxxxx Unicode文字(xxxxは4桁の16進定数)

教科書P.20~28

●算術演算子と式

・式とは演算子とオペランド(被演算子)を組み合わせたものです。
・Javaでは数種類の式を使う事が出来ます。

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

・*, /, %の各演算子は、+と-よりも優先度が高くなります。例えば
10 - 2 * 5
結果は0になります。

・ただし()を使う事により、式の評価順序を変更することができます。
(10 - 2) * 5
結果は40になります。

・Javaの式には変数、定数、またはその両方を含めることができます。
・例えば、answerとcountという変数があるとすると、次の式は有効です。
answer = count - 100;

・式の中では空白(スペース文字、タブ、改行)を自由に使う事が出来ます。
・次のようなステートメントがあるとすると、
i = i + 6;
・コレは次のような省略形に書き換えることができます。
i += 6
・*, /, -についてもどうような書き換えができます。
教科書P.91~94

●forステートメント


・Javaには3つのループステートメントがあります。その1つがforステートメントです。
・forを使うと一つまたは複数のステートメントを繰り返し実行することができ ます。

・forステートメント
   for(initialization; test; increment)  statement;   
・nitialization セクションは1回しか実行されず、その後にループが開始されます。
・この変数を一般にループ制御変数と呼びます。
・nitialization セクションの典型的な用途は、ループを制御する変数に初期値を設定することです。

・test セクションは、ループの開始時とループが繰り返されるたびに、ループの最初に実行されます。
・評価結果が真であればループは繰り返され、評価結果が偽であればループは停 止します。

・ncrementセクションはループが一回実行される度に、最後に実行されます。

・statement の部分は{}で囲むことで複数のステートメントを実行できます。
・statement は記述しなくても構いません。

教科書P.84~88

●ifステートメント


・ifステートメントは、Javaの選択ステートメント(条件ステートメント)の1つです。
・このステートメントの動作は、真または偽と評価される条件テストの結果によって制御されます。
   if (expression)
      statement 1;
   else
      statement 2;
 
・式(expression)が真の場合は if のターゲットが実行され、else部分は飛ばされます。
・逆に、偽の場合は if のターゲットが飛ばされ、else のターゲットが実行さ れます。
・両方のステートメントが共に実行されることはありません。
・statement の部分は{}で囲むことで複数のステートメントを実行できます。 ・else は記述しなかった場合、expression が偽であれば何も実行されずに次のコードに制御が移ります。

■プログラム2

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

■実行結果

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

■考察

教科書P.12~17

●変数と代入


・変数とは名前の付いたメモリ位置のこと、変数には何らかの値を格納することができます。
・一部のほかのコンピュータ言語とは異なり、Javaでは使用する変数をすべて使用前に宣言しなくてはいけません。
・変数の宣言には重要な目的があります。それは、コンパイラに対して、使用する型を知らせる事です。
・Javaには8種類の基本データ型がサポートされています。
Javaの基本データ型
分類 ビット数
char 文字(整数) 16 16ビットUnicodeキャラクタデータ(0 〜65535)
boolean 真偽値 1 true,false
byte 符号付整数 8 -27(-128)〜 27-1(127)
short 16 -215(-32768)〜215-1(32767)
int 32 -231(-2147483648)~231-1(2147483647)
long 64 -263(-9223372036854775808)〜 263-1(9223372036854775807)
float 浮動小数点数 32 ±3.40282347E+38 〜 ±1.40239846E-45
double 64 ±1.79769313486231570E+308 〜±4.94065645841246544E-324

文字列

・char型変数は、長さが16ビットで、1つのUnicode文字を格納する際に最も一般的に使われています。
・char型には0以上、65535以下の整数値が入ります。具体的には、整数値として、Unicode文字のコード番号を入れて使います。
・char型の値を表すのには、文字リテラルが使用できます。
・文字リテラルは、1個の文字をシングル・クォート(')で囲んで表します。 例  'A'

真偽値型

・boolean型変数は、true(真)またはfalse(偽)のどちらかの値を持ちます。
・例えば、式 a < b は、a が b よりも小さいならば true が返り、そうでなければ false が返ります。
・この結果を代入できる変数の型は、 boolean 型になります。

符号付整数型

・byte型、short型、int型、long型の変数には、符号付整数値を格納することができます。
・整数リテラル(余分な情報のない単なる整数値)は int 型と見なされます。
・そのため、long 型の値を表すには、サフィックス(接尾語)として「L」、または「l」を明示しなければなりません。
    long l;
    l = 10000000000L;←みたいな
・また、整数値は8進形式または16進形式で表すこともできます。
・8進数は0ではじまり、16進数は 0x または0X ではじまります。
  
   int i8  = 015;  //10進数の13を 8進数で表した。
   int i16 = 0x15; //10進数の21を16進数で表した。

浮動小数点数型

・float型およびdouble型の変数には、符号付き浮動小数点を格納することができます。
・この値は小数部分を持つものでもかまいません。
・float型に比べてdouble型の方が精度(有効行)が2倍だということです。
・float型の値を表すには、サフィックスとして「F」または「f」を明示します。

変数の宣言

・変数を宣言するには、次の構文をつかいます。
   type varName;   
・typeには変数の型を、varNameには変数の名前を指定します。
・Javaでは、変数名に英字、0から9までの数字、アンダースコア(_)、$、それに 一部のUnicode文字を使う事ができます。
・ただし、変数名の先頭に数字を使うことは出来ません。
・また、Javaでは英字の大文字と小文字が区別されます。

値の代入

・変数に値を代入するには、符号(=)の左辺に変数名を置き、等号の右辺にその変数に格納する値を置きます。
  varName =value;  
・varNameには変数名を、valueには値で定数または式を指定します。
・変数の宣言時に値を代入することもできます。これは変数初期化と呼ばれます。

教科書P.18~20

●文字列とキャラクタ

・文字列は、一連のキャラクタを二重引用符(")で囲む事によって、定義できます。
・println()メソッドでもこの方法で引数を指定します。
  System.out.println("文字列"); 

・String型の変数は、文字列を使用できる任意の場所で用いることができます。
   String s = "文字列代入";
   System.out.println(s);
実行結果
  文字列代入

・二重引用符を出力するには、「\」を二重引用符の直前に記述します。
System.out.println("二重引用符/" ");   
実行結果
二重引用符"

■プログラム3

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

}

■実行結果

算術演算子
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

■考察

教科書P.101~104

●関係演算子・論理演算子


関係演算子
演算子 意味
== 等しい i == j
!= 等しくない i != j
> より大きい i > j
< より小さい i < j
>= より大きいか等しい i >= j
<= より小さいか等しい i <= j
・関係演算子は、true/falseが帰ってくる条件式の、単純なものを記述するときに不可欠なものです。
・返される値はtrue/falseなので、その値を代入する変数はboolean型の変数でなければいけません。

論理演算子
演算子 動作 説明
& 論理積 AND。二つの項が真のときにだけ 結果が真となる論理演算
| 論理和 OR。二つの項が偽のときにだけ 結果が偽となる論理演算
^ 排他的論理和 Exuclusive OR。二つの 項が異なるときにだけ結果が 真となる論理演算
! 否定 NOT。項の真偽が逆になる論理演算
& 論理積(ショートカット)
|| 論理和(ショートカット)
・論理演算子は、次の真理値表に基づいて論理積、論理和、排他的論理和、否定の各論理演算をサポートします。
        
真理値表
p q p &q p | q p ^ q !p

・&&、|| の二つの演算子はショートカット演算子と呼ばれます。
・&,|では。必ず両方のオペランドが評価されますが、&&,||では最初に左のオペランドが評価され、右は必要な場合だけ評価されます。
例えば
a>0 & c>a  
これでは2つのオペランドは必ず評価されます。
a>0 && c>a  
しかし、上の式ではaが0以下の場合、右のオペランドは評価されません。
なぜなら、論理積は一方のオペランドが偽だった時点で結果が決まるからです。
このショートカットにより無駄な処理を省く事ができます。

■反省・感想

・今回のレポートはなかなか頑張りました。かなり時間がかかりました。
・レポートは頑張るだけ自分の為になると思うので、次ももっと頑張ります。

・参考文献・URL
:独習Java 第3版