課題:講義資料を参考にJavaの基礎的な文法について、教科書と対応させ
ながら解説・考察せよ。
ソース1
プログラム1
1 public /*これもコメントです*/ class Report3a { //
2 Report3a.java
3 public static void main(String args[]) { // mainの記述
4 System.out.println("コメント");
5 cmnt(); // cmntスレッド
6 の呼び出し
7 System.out.println(¥n¥n文字列出力");
8 smp1();
9 System.out.println("¥n¥n変数宣言と数値出力");
10 smp2();
11 System.out.println("¥n¥n繰り返し処理");
12 smp3();
13 System.out.println("¥n¥n条件処理");
14 smp4();
15 }
16
17 public static void cmnt() { // mainの記述
18 System.out.println("My first Java."); // 文字列出力す
19 る
20 }
21
22 public static void smp1() {
23 System.out.print("AAAAA");
24 System.out.print("BBBBB¥nCCCCC¥n");
25 System.out.println("DDDDD");
26 System.out.println("EEEEE¥nFFFFF¥n¥nGGGGG");
27 System.out.println("HHHHH" + "IIIII");
28 }
29
30 public static void smp2() {
31 int a, b, sum;
32
33 a = 100;
34 b = 200;
35 sum = a + b;
36 System.out.print("a="); // 文字列だけ出力
37 System.out.println(a); // 数値だけ出力
38 System.out.println("b=" + b); // 文字列と数値を
39 出力
40 System.out.println("a+b=" + sum); // 結果を出力
41 System.out.println("a+b=" + (a+b)); // 直接計算させる
42 }
43
44 public static void smp3() {
45 int i, sum;
46
47 for (i=1; i<=5; i++)
48 System.out.println("i=" + i);
49
50 sum = 0;
51 for (i=1; i<=5; i++) {
52 sum = sum + i;
53 System.out.println("sum=" + sum);
54 }
55 }
56
57 public static void smp4() {
58 int i;
59
60 for (i=1; i<=5; i++) {
61 System.out.print("i=" + i);
62 if (i < 3)
63 System.out.println(" 3未満です");
64 else
65 System.out.println(" 3以上です");
66 }
67 }
68
69 }
実行結果
コメント
My first Java.
文字列出力
AAAAABBBBB
CCCCC
DDDDD
EEEEE
FFFFF
GGGGG
HHHHHIIIII
変数宣言と数値出力
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以上です
考察
・1行目について:クラスの定義。
public:Test01クラスの外部からこのコードの呼び出すことができることを示す
アクセス指定子です。
class :javaプログラムではその処理を1つ以上のクラス内で行う。
よってjavaプログラム内では最低1つのクラスを指定しなければ
ならない。ここでは"Test01"と言うクラスを指定している。
コメント:
コメントとは、自分や他のプログラマーのためにソースコード内に書き込むメモの事。
コンパイラはすべてのコメントを無視する。
コメントは後からソースコードの機能や使用方法を思い出す事ができるように、その意味と目的を説明しておくために使用する。
Javaのコメントには3とおりの形式がある。
1.単一行コメント
//ではじまり、その行以降の文字が行末尾までコメントとして解釈される。
例
int i = 10; // iはカウンタとして使用する |
2.複数行コメント
/*ではじまり、*/で終わる。
例
/*
これは、
5行にわたる
長いコメント。
*/ |
3.ドキュメンテーションコメント
/**という3文字ではじまり、*/という2文字で終わる。
例
/**
これはJavaの
ドキュメンテーション
コメント。
*/ |
・2行目について:main()メソッド。
static:この関数がTest01クラスのインスタンスではなくTest01クラス自体に
関連づけられたものである事を示す。
void :この関数に返り値がない事を示す。
String args[]:main関数の引数である。ここでは使用しない。
・3〜12行目について:printlnメソッドと関数呼び出し。
cmnt();,smp1();,smp2();
smp3();,smp4();, :各名前の 後に処理方法が定義されている
関数(スレッド)を呼び出している。
・15〜24行目について:printlnメソッドと、printメソッド
1.println:引数に渡された文字列を出力し、文末に改行文字が自動出力される。
2.print :引数に渡された文字列を出力し、文末に改行文字が出力されない。
| |
・25〜36行目について:式の値の出力
print("~~"+X):
"~~"の中身を出力した後に関数Xの値を出力する。
Xは関数だけでなく、関数を含んだ四則演算でも良い。
"~~"を記述せずにXだけを引数に指定すると
Xの値のみを出力する。
・37〜49行目について:繰り返し処理
繰り返し処理について
Javaには3種類のループステートメントがそのうちの1つがforステートメント。
for(初期状態; 終了条件; 継続処理) {
ステートメント;
} |
「初期状態」は1回しか実行されず、その後にループが開始される。
「終了条件」では普通、ループ制御変数と目標値を比較する。
「終了条件」の評価結果が真の場合はループが繰り返され、偽になるとループは停止し、ループの後に続くコードに制御が移る。
「終了条件」は、ループの開始時とループが繰り返されるたびに、ループの最初に実行される。
「継続処理」はループの最後に実行される。
つまり、ループ本体の「ステートメント」がすべて実行された後で実行される。
「継続処理」の典型的な用途は、ループ制御変数の値を一定量ずつ増やすこと(あるいは減らすこと)。
・50〜61行目について:条件処理
条件処理:
ifステートメントは、Javaの選択ステートメント(条件ステートメン
トとも呼ばれる)の1つ。
ifにelseステートメントを追加することが出来る。
if (条件式1){
ステートメント 1;
}
else if (条件式2){
ステートメント 2;
}
else if (条件式3){
}
ステートメント 3;
}
else{
ステートメント 4
} |
構文は上記のようになり、条件式1が真である場合は、ステートメント1を実行する。
条件式1が偽で条件式2が真の場合はステートメント2を実行する。
条件式1・2ともに偽で条件式3が真の場合はステートメント3を実行する。
すべての条件式が偽の場合はステートメント4を実行する。
このような形で複数の条件分岐が可能となる。
プログラム2
1 public class Report3b { // Report3b.java
2 public static void main(String args[]) {
3 char ch;
4 boolean bdt;
5 int idt;
6 long ldt;
7 float fdt;
8 double ddt;
9 String ss;
10 final int CNST1 = 1234; // final定数
11
12 ch = 'A'; // 半角文字
13 System.out.println("文字=" + ch + " code=" + (int)ch);
14 ch = '亜'; // 全角文字
15 System.out.println("文字=" + ch + " code=" + (int)ch);
16
17
18 bdt = true;
19 System.out.println("bdt = " + bdt);
20
21 idt = 1234567890;
22 System.out.println("idt = " + idt);
23
24 ldt = 1234567890123456789L; // Lはlong値を示す
25 System.out.println("ldt = " + ldt);
26
27 fdt = 123.456F; // Fはfloat値を示す
28 System.out.println("fdt = " + fdt);
29
30 ddt = 123.456789012345;
31 System.out.println("ddt = " + ddt);
32
33 idt = 022; // 8進数の22
34 System.out.println("8進22 = " + idt);
35
36 idt = 0x22; // 16進数の22
37 System.out.println("16進22 = " + idt);
38
39 ddt = 5.67e4; // 指数表現の56700
40 System.out.println("指数 = " + ddt);
41
42 ch = '¥n'; // エスケープ文字
43 System.out.println("改行文字コード = " + (int)ch);
44
45 ss = "AAAA¥tBBBB"; // 文字列定数(エスケープ
46 文字を含む)
47 System.out.println("ss = " + ss);
48
49 System.out.println("CNST1 = " + CNST1);
50 }
51 }
実行結果
文字=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
考察
変数の基本データ型:
型 説明
char 16ビットUnicodeキャラクタデータ
boolean 真偽値
byte 8ビット符号付き整数
syort 16ビット符号付き整数
int 32ビット符号付き整数
long 64ビット符号付き整数
float 32ビット符号付き浮動小数点
double 64ビット符号付き浮動小数点
変数宣言前に指定できる修飾子:
キーワード 意味
final 定数として使える変数
private 同じクラスのコードからしかアクセスできない変数
protected サブクラスまたは同じパッケージ内のコードからしかアクセスできない変数
public ほかのクラスからアクセスできる変数
static インスタンス変数ではない変数
transient クラスの永続的な状態の一部ではない変数
volatile 不意に値が変更されることがある変数
8進数と、16進数:
8進数は0からはじまり、16進数は0xまたは0Xではじまる。
x8進数の22 022
16進数の22 0x22
float型:
小数点または指数を含んだ数値リテラルは、double型と見なされる。
float型の値を表すには、サフィックスとして「F」または「f」を明示する。
プログラム3
1 public class Report3c { // Report3c.java
2 public static void main(String args[]) {
3 System.out.println("算術演算子");
4 comp1();
5 System.out.println("¥n¥n関係演算子");
6 comp2();
7 System.out.println("¥n¥n論理演算子");
8 comp3();
9 System.out.println("¥n¥nインクリメント/デクリメント
10 演算子");
11 comp4();
12 }
13
14 public static void comp1() {
15 int a, b, c;
16 double f, g, h;
17
18 a = 100; System.out.println("a = " + a);
19 b = 30; System.out.println("b = " + b);
20 c = a + b; System.out.println("a+b = " + c); // 加算
21 c = a - b; System.out.println("a-b = " + c); // 減算
22 c = a * b; System.out.println("a*b = " + c); // 乗算
23 c = a / b; System.out.println("a/b = " + c); // 整数
24 除算
25 c = a % b; System.out.println("a%b = " + c); // 整数
26 剰余
27
28 f = 90.0; System.out.println("f = " + f);
29 g = 40.0; System.out.println("g = " + g);
30 h = f / g; System.out.println("f/g = " + f/g); // 浮動
31 小数点数除算
32 }
33
34 public static void comp2() {
35 int a;
36 for (a=1; a<=5; a++) {
37 System.out.println("--------" + a);
38 if (a < 2) System.out.println("2未満");
39 if (a >= 4) System.out.println("4以上");
40 if (a == 3) System.out.println("3である");
41 if (a != 3) System.out.println("3ではない");
42 }
43 }
44
45 public static void comp3() {
46 int a;
47
48 for (a=1; a<=5; a++) {
49 System.out.println("--------" + a);
50 if (a>=2 && a<=4)
51 System.out.println("2以上かつ4以下");
52 if (a<2 || a>4)
53 System.out.println("2未満または4より大");
54 if (!(a==1 || a==3))
55 System.out.println("1または3、ではない");
56 }
57 }
58
59 public static void comp4() {
60 int dt[] = {100, 200, 300}; // 配列を確保
61 int n;
62
63 // ++演算子を使わないときの記述
64 n = 0;
65 System.out.println(dt[n]); // dt[0]を表示
66 n = n +1;
67 System.out.println(dt[n]); // dt[1]を表示
68 n = n +1;
69 System.out.println(dt[n]); // dt[2]を表示
70
71 // ++演算子を使ったときの記述
72 n = 0;
73 System.out.println(dt[n++]); // dt[0]を表示
74 System.out.println(dt[n++]); // dt[1]を表示
75 System.out.println(dt[n++]); // dt[2]を表示
76
77 // --演算子を使う
78 n = 5;
79 while (--n >= 0) { // n回繰り返す
80 System.out.println("n=" + n);
81 }
82 }
83
84 }
実行結果
算術演算子
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
考察
算術演算子について:
演算子 説明
+ 加算
- 減算(単項マイナス)
* 乗算
/ 除算
% 乗余
+= 加算代入
-= 減算代入
*= 乗算代入
/= 除算代入
関係演算子について:
演算子 意味 例
== 等しい i==j
!= 等しくない i!=j
> より大きい i>j
< より小さい i<j
>= より大きいか等しい i>=j
<= より小さいか等しい i<=j
論理演算子について:
演算子 動作 説明
& 論理積 AND。2つの項が真のときに
だけ結果が真となる論理演算
| 論理和 OR。2つの項が偽のときにだ
け結果が偽となる論理演算
^ 排他的論理和 Exclusive OR。2つの項が
異なるときにだけ結果が真となる論理演算
! 否定 NOT。項の真偽が逆になる論
理演算
&& 論理積(ショートカット)
|| 論理和(ショートカット)
== 等しい
!= 等しくない
インクリメント/デクリメント演算子について
演算子 説明
++ インクリメント
-- デクリメント
int i, j;
i = 10;
j = i++;
上記の文は、jにiの値を入れた後に、iの値を1増やす。jの値は10。
感想
今週は少し事情があり時間がなかった。
また、今回のレポートは調べることが多くて、時間がかかった。
しかし、基本的なことはC言語と似ていたので分かり易かった。
次はまとめ方をもう少し工夫しようと思う。
参考文献・URL
独習Java 第2版 ジョゼフ・オニール 著