Report#5
1.課題(サンプルプログラムの考察)
2.課題(オリジナルプログラム)
3.感想・反省、参考文献
1.サンプルプログラムについての考察
オブジェクト指向プログラム
■サンプルプログラム
class CircleC {
double pai = 3.14;
double circle(int r) {
return pai * r * r;
}
}
class Demo {
public static void main(String args[]) {
double area;;
CircleC obj;
obj = new CircleC();
area = obj.circle(10);
System.out.println("area = " + area);
}
}
■実行結果
area = 314.0
|
考察
class CircleC {
・クラスCircleCを宣言
double pai = 3.14;
・double型変数paiに3.14(円周率)を代入
double circle(int r) {
・circleメソッドが引数rを持つことを宣言
return pai * r * r;
・pai * r * rの値をcircleに返す
class Demo {
・クラスDemoを宣言
public static void main(String args[]) {
double area;
CircleC obj;
・CircleCクラス型の変数を宣言
obj = new CircleC()
・オブジェクトを作成し、オブジェクトを扱う変数objに代入
area = obj.circle(10);
・objオブジェクトのcircleメソッドに10の値を返している。
つまり、circleメソッドの引数rに10を代入し、pai * r * rを実行
し、その値をareaに代入している
System.out.println("area = " + area);
・areaの値を表示
クラス
クラスは上のように変数の宣言(初期値が設定されていることもある)と関数の
ような形態の処理プログラムとで構成されている。
クラスの基本構文
[修飾子] class クラス名 [extends スーパークラス名]
[implements インターフェース名] {
データ定義部
メソッド定義部
}
|
修飾子
public : パッケージ外からもこのクラスを参照できるクラス
abstract : 実装されてない抽象クラス
final : スーパークラスとしてサブクラスを作れないクラス
メソッド
メソッドとは、本質的にはプログラムステートメントの集合体であり、Javaの基
本的な実行単位となる。プログラム実行中、メソッドは同じクラスあるいはほか
のクラスのメソッドを呼び出すこともある。
メソッドの基本構文
[修飾子] メソッドの型 メソッド名([引数]) {
処理内容
}
|
オブジェクト
オブジェクトとは、状態と動作の両方を定義する記憶領域のことであり、
データとそれを操作するコードの組み合わせである。記憶領域はメモリであるこ
ともディスクであることもある。
オブジェクトの基本構造
オブジェクトの宣言
オブジェクトの生成
オブジェクトの宣言と生成をまとめて1行で記述することもできる
クラス名 オブジェクト変数 = new クラス名();
|
■サンプルプログラム
class ObjSample {
public static void main(String args[]) {
Display obj = new Display(); // クラスDisplayのオブジェクトobjの生成
obj.Disp("Hello Java"); //オブジェクトobjのメソッドDispを呼ぶ
}
}
class Display { // クラスDisplayの定義
void Disp(String message) { // メソッドDispの定義
System.out.println(message);
}
}
■実行結果
Hello Java
|
■サンプルプログラム
public class Comp4 { // クラスComp4を定義
int add(int x, int y) { // メソッドadd(int x,int
y)を定義
return x + y; // x + y を返す
}
int substract(int x, int y) { // メソッドsubstractを定
義
return x - y; // x - y を返す
}
int multiply(int x, int y) { // メソッドmultiplyを定義
return x * y; // x * y を返す
}
int divide(int x, int y) { // メソッドdivideを定義
return x / y; // x / y を返す
}
}
class Keisan {
public static void main(String args[]) {
int a, b, wa, sa, seki, sho;
Comp4 enzan = new Comp4(); // クラスComp4のオブジェ
クトenzan作成
a = 20;
b = 10;
wa = enzan.add(a, b); // オブジェクトenzanの
add(a,b)を実行
sa = enzan.substract(a, b); // 同上のsubstract(a,b)を
実行
seki = enzan.multiply(a, b); // 同上のmultiplu(a,b)を
実行
sho = enzan.divide(a, b); // 同上のdivide(a,b)を実
行
System.out.println(a + " + " + b + " = " + wa);
System.out.println(a + " - " + b + " = " + sa);
System.out.println(a + " * " + b + " = " + seki);
System.out.println(a + " / " + b + " = " + sho);
}
}
|
■実行結果
20 + 10 = 30
20 - 10 = 10
20 * 10 = 200
20 / 10 = 2
|
考察
public class Comp4 {
・クラスComp4を宣言
int add(int x, int y) {
・int型のx、yを引数にもつaddメソッドを宣言
return x + y;
・x+yの値を返す
int substract(int x, int y) {
・int型のx、yを引数にもつsubstractメソッドを宣言
return x - y;
・x-yの値を返す
int multiply(int x, int y) {
・int型のx、yを引数にもつmultiplyメソッドを宣言
return x * y;
・x*yの値を返す
int divide(int x, int y) {
・int型のx、yを引数にもつdivideメソッドを宣言
return x / y;
・x/yの値を返す
class Keisan {
・クラスKeisanを宣言
Comp4 enzan = new Comp4();
・クラスComp4のオブジェクトenzanを生成
a = 20;
b = 10;
wa = enzan.add(a, b);
sa = enzan.substract(a, b);
seki = enzan.multiply(a, b);
sho = enzan.divide(a, b);
それぞれのメソッドadd,substract,multiply,divideにa,bの値を渡す
ローカル変数とクラス変数
- クラス変数 : クラスにおいて、すべてのメソッドの外側で宣言される変数
であって、staticという修飾子(キーワード)が付いているもの。クラス変数は、
そのクラスから生成されるインスタンス(オブジェクト)に属するのではなく、
クラス自身に属します。その有効範囲は、そのクラスを参照できる場所、および
そのクラスから生成されたインスタンス(オブジェクト)の内となる。
- ローカル変数 : クラスにおける各メソッド内で宣言された変数。有効範囲
はそのメソッド内になる。
■サンプルプログラム
classs Display {
int n
void Disp() {
int i;
for (i = 1; i <= n; i++)
System.out.print(I + " ");
}
class VarSample {
public static void main(String args[]) {
Display obj = new Display();
obj.n = 10;
obj.Disp();
}
}
|
■実行結果
考察
classs Display {
・クラスDisplyを宣言
int n
・int型クラス変数nを宣言
void Disp() {
・Disp()メソッドの宣言
int i;
・int型ローカル変数iを宣言
class VarSample {
・クラスVarSampleを宣言
Display obj = new Display();
・クラスDisplayのオブジェクトobjを生成
obj.n = 10;
・オブジェクトobjの変数nに10を代入
obj.Disp();
・オブジェクトobjのDisp()実行
2.オリジナルプログラム
■オリジナルプログラム
import java.io.*;
import java.util.*;
public class Time2 {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("イギリスとハワイの現在の時刻を出力します。");
System.out.println("現在の日本の時刻を入力してください。");
System.out.println("何日?");
int x = Integer.parseInt(in.readLine());
System.out.println("何時?");
int y = Integer.parseInt(in.readLine());
System.out.println("何分?");
int z = Integer.parseInt(in.readLine());
Hawaii obj1 = new Hawaii();
int hinichi = obj1.HTh( x );
Hawaii obj2 = new Hawaii();
int jikan = obj2.HTj( y );
England obj3 = new England();
int hinichi2 = obj1.HTh( x );
England obj4 = new England();
int jikan2 = obj2.HTj( y );
System.out.println("ハワイの現在時刻は" + hinichi + "日" + jikan ?
+ "
時" + z + "分です。");
System.out.println("イギリスの現在時刻は" + hinichi2 + "日" + jik?
an2
+ "時" + z + "分です。");
}
}
class Hawaii {
int hinichi;
int jikan;
Hawaii() {
hinichi = 0;
jikan = 0;
}
static {
System.out.println("ハワイの現在時刻");
}
int HTh (int x) {
hinichi = (int) ((x - 1) % 31);
return hinichi;
}
int HTj (int y) {
jikan = (int) ((y + 5) % 24);
return jikan;
}
}
class England {
int hinichi2;
int jikan2;
England() {
hinichi2 = 0;
jikan2 = 0;
}
static {
System.out.println("イギリスの現在時刻");
}
int HTh (int x) {
hinichi2 = (int) (x);
return hinichi2;
}
int HTj (int y) {
jikan2 = (int) ((y - 9) % 24);
return jikan2;
}
}
|
■実行結果
イギリスとハワイの現在の時刻を出力します。
現在の日本の時刻を入力してください。
何日?
5
何時?
14
何分?
35
ハワイの現在時刻
イギリスの現在時刻
ハワイの現在時刻は4日19時35分です。
イギリスの現在時刻は5日5時35分です。
|
考察
public class Time2 {
・クラスTime2を宣言。
BufferedReader in = new BufferedReader(new InputStreamReade?
r(System.in));
System.out.println("何日?");
int x = Integer.parseInt(in.readLine());
System.out.println("何時?");
int y = Integer.parseInt(in.readLine());
System.out.println("何分?");
int z = Integer.parseInt(in.readLine());
・
Hawaii obj1 = new Hawaii();
int hinichi = obj1.HTh( x );
Hawaii obj2 = new Hawaii();
int jikan = obj2.HTj( y );
England obj3 = new England();
int hinichi2 = obj1.HTh( x );
England obj4 = new England();
int jikan2 = obj2.HTj( y );
class Hawaii {
・クラスHawaiiを定義
Int hinichi;
int jikan;
・int型クラス変数hinichi、jikanを宣言
Hawaii() {
・Hawaiiメソッドの定義
Hinichi = 0;
jikan = 0;
・変数Hinichi、jikanの値をそれぞれ0に初期化
Int HTh (int x) {
・メソッドHTh (int x)を定義
hinichi = (int) ((x - 1) % 31);
return hinichi;
・hinichiの演算をしてその値を返す
int HTj (int y) {
・メソッドHTj (int y)を定義
jikan = (int) ((y + 5) % 24);
return jikan;
・jikanの演算をしてその値を返す
class England {
・クラスEnglandを定義
int hinichi2;
int jikan2;
・int型クラス変数hinichi2、jikan2を宣言
hinichi2 = 0;
jikan2 = 0;
・変数hinichi2、jikan2の値をそれぞれ0に初期化
int HTh (int x) {
・メソッドHTh (int x)を定義
hinichi2 = (int) (x);
return hinichi2;
・hinichi2の演算をしてその値を返す
int HTj (int y) {
・メソッドHTj (int y)を定義
jikan2 = (int) ((y - 9) % 24);
return jikan2;
・jikan2の演算をしてその値を返す
3.反省・感想、参考文献
反省・感想
友達に助けてもらいました。勉強しないといけないです。
参考文献
独習Java 第2版 ジョゼフ・オニール 著
トップスタジオ 訳
武藤 健志 監修
新Java言語入門ビギナー編 林 晴比古 著