Report3(11/15締め切り)

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

・サンプルプログラム

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以上です");
}
}

}

〜実行結果〜

コメント
My first Java.

文字列出力
AAAAABBBBB
CCCCC
DDDDD
EEEEE
FFFFF

GGGGG

変数宣言と数値出力
a=100
b=200
a+b=300
a+b=300

繰り返し処理
i=0
i=1
i=2
i=3
i=4
i=5
sum=0
sum=1
sum=3
sum=6
sum=10
sum=15

条件処理
i=0
3未満です。
i=1
3未満です。
i=2
3未満です。
i=3
3以上です。
i=4
3以上です。
i=5
3以上です。

〜考察〜

1. コメントについて(教科書P28~)

		a.コメントとは、自分自身(または他のプログラマ)のためにソースコード内に書き込むメモの事。
		b.コンパイラは全てのコメントを無視する。
		c.javaのコメントには3とおりの形式がある。


    c-1.単一行コメント
      このコメントは『//』ではじまり、行末尾までコメントとして解釈される。
ex1)
int i = 10; //iはカウンタとして使用する
        c-2.複数行コメント
      このコメントは『/*』ではじまり、『*/』で終わる。

      c言語でも用いた。
ex2)
/*これはコメントですよ*/
    c-3.ドキュメンテーションコメント
  		  このコメントは『/**』という3文字ではじまり『*/』という2文字で終わる。
            利点は、javadocを用い、コメントを抜き出し、プログラムのマニュアルを自動的に作成出来る。
   

ex3)

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

2.println()、print()について

 ・どちらのメソッドとも、キャラクタを””で囲み、文字列を出力させている。

 ・以前のレポートで違いを調べたが、簡単に復習すると、println()が改行あり、print()が改行なしである。ただ
  今回はどちらも改行されている。これは¥nを使用しているため。
・バックスラッシュコード(エスケープシンス) 
  
¥b バックスペース
¥n 改行
¥r キャリッジリターン
¥f フォームフィード
¥t 水平タブ
¥" 二重引用符
¥' 一重引用符
¥0 null値
¥¥ バックスラッシュ
¥N 8進定数(N=0〜7)
¥NN 8進定数(N=0〜7)
¥MNN 8進定数(M=0〜3、N=0〜7)
¥uxxxx Unicode文字(xxxxは4桁の16進定数)
※バックスラッシュコードは文字定数のため、文字変数に代入するときには’’で囲まなければならない。

3.forステートメントについて(教P90〜)

 a.Javaにある3つのループステートメントの中の1つ。
 b.forを使うと1つまたは複数のステートメントをくり返し実行する事が出来る。 
for(initialization; test; increment) statement;

4.if-elseステートメントについて(教P87〜)

  a.if-elseはifステートメントに比べ、二者択一の判断が可能となる。

 b.真か偽かというふうに、if,else両方のステートメントがともに実行される事はない。
if (expression)
             statement 1;
			 else 
			    statement 2;
				   

・サンプルプログラム2

public class Test02 {

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
ldt = 1234567890123456789
fdt = 123.456
ddt = 123.456789012345
8進22 = 18
16進22 = 34
指数 = 56700.0
改行文字コード = 10
ss = AAAA BBBB
CNST1 = 1234

 

〜考察〜

1変数と代入(教P12〜)

 a.変数とは名前のついたメモリ位置のことで、何らかの値を格納する事が出来る。
 b.使用する変数をすべて使用前に宣言しなければならない。

 c.宣言する事によりコンパイラに変数の型を知らせる。
 d.Javaには8種類の基本データ型がサポートされ用いる。
char 16ビットUnicodeキャラクタデータ
boolean 真偽値
byte 8ビット符号付き整数
short 16ビット符号付き整数
int 32ビット符号付き整数
long 64ビット符号付き整数
float 32ビット符号付き符号小数点数
double 64ビット符号付き浮動小数点数

・変数の宣言時に値を代入する事も出来る。このことを変数初期化と呼ぶ。

・long型の値を表すにはサフィックス(接尾辞)として『L』または『l』を明示しなければならない。

・flort型の値を表すにはサフィックス(接尾辞)として『F』または『f』を明示しなければならない。

 

・サンプルプログラム3

public class Test03 {

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

 

〜考察〜

1.算術演算子について(教P=20〜)

 a.-には2つの意味がある。
       a-1.第一に減算演算子。
	    a-2.第二に数値の符号を逆にするための単項演算子のマイナス。

 b.*,/,%の各演算子は+とーよりも優先度が高くなる。

 c.小括弧()を使用して式の評価順序を変更する事が出来る。  

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

 

2.関係演算子について(教P=85)

 a.関係演算子は2つのオペランド(オペランド=演算の対象となるデータ)の間の関係をテストする。

演算子 意味
== 等しい s==k
!= 等しくない s!=k
> より大きい s>k
< より小さい s<k
>= より大きいか等しい s>=k
<= より小さいか等しい s<=k

3.論理演算子について(教P=100〜)

a.論理演算子はboolean型のオペランドに作用する。

 ・関係演算子の評価結果はboolean型となるため、関係演算子と組み合わせて良く使われる。

 

演算子 動作 説明
& 論理積 AND。2つの項が真のときにだけ結果が真となる論理演算
| 論理和 OR。2つの項が偽のときにだけ結果が偽となる論理演算
^ 排他的論理和 Exclusive OR。2つの項が異なるときにだけ結果が真となる論理演算
! 否定 NOT。項の真偽が逆になる論理演算
&& 論理積(ショートカット)
|| 論理和(ショートカット)
== 等しい
!= 等しくない
 b.&&,||の二つの演算子はショートカットと呼ばれる。
       ・&、|では必ず両方のオペランドが評価される
        しかし、&&、||は最初に左のオペランドが評価され、右のオペランドは必要な場合だけ評価される。
 c.論理積と論理和が関係する状況でショートカット演算子を使うと、無意味なステートメントによる無駄な処理が省かれるので、
	   効率的なコードが作成できる。
 d.関係演算子を論理演算子でいくつもつなぐ事が出来る。
 e.関係演算子と論理演算子の作成する値は必ず真か偽になる。
    ・よって、ifステートメントやforステートメントなどで使いやすい。

〜感想&反省〜

 今回は例年と異なる趣向のレポート。。考察メインなのであまり楽しくなかったなぁ...でも、知識はつきましたけど。
   表を作ったりと、htmlの勉強にもなりました。
    いつものように追い込まれながらの提出。。来週は中間テストなので、平均点は取れるようにがんばります!

〜参考にした本、ページ〜

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

浅煎り珈琲 Java アプリケーション入門  http://msugai.fc2web.com/java/index.html