Report#4 :第1回Java試験問題を解答を解説し、その動作について考察せよ。 併せて、講義資料オブジェクト指向プログラムJavaIの中のサンプルプログラ ムについて考察せよ。{〜12/01(Mon)} *試験問題については全ての解答について記述し、コードの考察を主に行うこ と。 *講義資料サンプルプログラム考察については、講義中の解説によってどこま で行うかを指示する。 =============================================================================== 1.第1回Java試験問題の解答、考察 Q1 Javaのソースファイル{Sample.java}をコンパイルせよ。 解: javac Sample.java Q2 Javaソースファイル{Sample.java}をコンパイルした後にできるファイル名   を述べよ。 解: Sample.class Q3 Javaコンパイルに対して、実行時に使われるjavaコマンドは何と言うか?   解: Javaインタプリンタ Q4 Javaアプリケーションに対して、Web上で動作するプログラムを何と言うか   述べよ。 解: Javaアプレット Q5 Webブラウザ上で動作するJavaプログラムを他の方法で実行するコマンドは   何と言うか述べよ。 解: appletviewer Q6 サーバ上で動作するJavaプログラムを何と言うか述べよ。 解: Javaサーブレット Q7 メインメソッドを定義せよ。 解: public static void main(){}; Q8 標準出力を使用し、"Hello"のみを出力せよ。 解: System.out.print("Hello"); Q9 Java言語には含まれていない予約語を2つ述べよ。 解: const goto Q10 char型のサイズと保持できる値を述べよ。 解: 16ビット Unicode Q11 データ型として整数を保持できるがたを4つ述べよ。 解: int byte long short Q12 参照型を2つ述べよ。 解: クラス型 配列型 Q13 文字列や数値の連結ができる演算子を述べよ。 解: + Q14 実行のフローを分岐させる制御分を2つ述べよ。 解: if switch Q15 反復処理を行う制御文を3つ述べよ。 解: for while do-while Q16 例外処理を行う制御文を述べよ。 解: throw Q17 配列の生成で使用されるキーワードを述べよ。 解: new Q18 int型の配列名aの宣言方法を2つ述べよ。 解: int a[]; int[] a; Q19 配列名aの要素数(大きさ)を述べよ。 解: a.length Q20 concatメソッドのクラスを述べよ。 解: java.lang.String Q21 int[] a={}; の要素数を数値で述べよ。 解: 0 Q22 int型変数numが100で割り切れるかどうかを判断する制御文を述べよ。 解: if(num%100==0) Q23 int型変数yearが、閏年かどうかを判断する条件式を述べよ。(閏年:4 で割れ100で割り切れないが、400で割り切れる年。) 解: year%4==0&&year%100!=0||year%400==0 Q24 次のコードを実行した後の出力値を述べよ。   int x, y; x = 100; x +=1; x--; y = 200 + x; System.out.println(y++); 解: 300 Q25 次のコードを実行した後の出力値を述べよ.  int a=0,x=0;  a = 5;a +=3; x = ++a;  System.out.println(x); 解: 9 Q26-1 次のコードを実行した後の出力値を述べよ.  int a=9,b=3;  a /=b;  System.out.println(a%b); 解: 0 Q16-2 次のコードを実行した後の出力値を述べよ.  int i,j;  for(i=0,j=0; i<3; i++) ++j;  System.out.println(i+j); 解: 9 Q27 次のコードを実行した後の出力値を述べよ.  int i=2;  while(i-- > 0)System.out.print(i); 解: 10 Q28 次のコードを実行した後の出力値を述べよ.  int num=10000;  for(int i=0; i<4;i++) num >>= i;  System.out.println(num); 解: 156 Q29 次のコードを実行した後の出力値を述べよ.  int num=0;  for(int i=1;i<=10;i++){if(++num & i ==0) num++;}  System.out.println(++num); 解: 12 Q30 次のコードを実行した後の出力値を述べよ.  int a=9;  if(a++ !=10 | a++ ==10) a++  System.out.println(a); 解: 12 =============================================================================== *考察  Q7 メインメソッドは publc static void main(String args[]){} と定義します。{}をつけないと点数はもらえないので注意して下さい Q8 Helloのみを表示するには System.out.print("Hello")という風に書かなければいけません。 printlnだとよけいな改行コードがくっついてくるので今回の問題では不正 解をもらってしまいます。 Q9 javaに含まれていない予約語は gotoとconstです。 Q24 この問題はy++となっているので、答は300になります。もし、プログラム が続いていたら301になっていたと思います。 Q25 これはa=0からa=5と代入され、+3されXに代入される際に++aとされているので 9となる。 Q26 i=2のとき、i<3を満たしているので、インクリメントされる。 結果、i=3, j=3 となる。 Q27 2>0より条件を満たす。その後にデクリメントされて、出力。 1>0より条件をみたす。その後にデクリメントされて、出力。 Q28 numを2進数に直した値を6bitシフトさせ、numに代入します。 10進数に直したnumを表示します。結局10000を2の6乗で割った商を表示して います。 Q29 制御変数iを1に初期化する。 numをインリメントした値がiで割りきれたら、numをインクリメントする。 インクリメントしたnumを表示します。 Q30 if文の中の条件式で2回インクリメントされています。 インクリメントしたaを表示します。 ============================================================================== 2、講義資料サンプルプログラムの考察 <プログラム> 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(); // クラスCircleCのオブ                         ジェクト変数objを宣言 area = obj.circle(10); // circle(int r)に10を                      代入した値を受け取る System.out.println("area = " + area); } } <実行結果> area = 314.0 <考察> 3行目: CircleCクラスのcircleメソッドを定義している。このメソッドはint型を     引数に持ち,円の面積を求めるものである。 10行目: クラスCircleCのオブジェクト変数objを宣言 11行目: クラスCircleCのオブジェクトを生成 12行目: クラスCircleCのcircleメソッドに行く。rに10を引き渡す 。 <プログラム> 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 <考察> String message で Hello Java を文字列として受けって入る voidによってメソッドDispは値を返していないのでこのクラスで動作している <プログラム> public class Comp4 { // クラスComp4を定義 int add(int x, int y) { // メソッドadd(intx,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 <考察> それぞれの wa, sa, seki, shoのenzan.add(a, b);substract(a, b); multiply(a, b); divide(a, b); をenzanつまりclass Comp4に行き、 aをint x, bをint y にだいにゅうしてそれぞれを演算して値をいれている。 <参考文献> JAVAクイックリファレンス JAVA言語ハンドブック