Report#4(Java)

○第1回Java試験問題を解答を解説し、その動作について考察せよ。併せて、講義資料オブジェクト指向 プログラムJavaIの中のサンプルプログラムについて考察せよ。 ●試験問題については全ての解答について記述し、コードの考察を主に行うこと。 ●講義資料サンプルプログラム考察については、オブジェクト指向プログラム・クラス・メソッド・ オブジェクトまでとする。

【Java試験問題】

01 javaのソースファイル(Sample.jaca)をコンパイルせよ。
答え:javac Sample.java
02 javaのソースファイル(Sample.java)をコンパイルしたあとにできるファイル名を述べよ。
答え:Sample.class
03 javaコンパイラに対して、実行時に使われるjavaコマンドは何と言うか述べよ。
答え:javaインタプリタ
04 javaアプリケーションに対して,Webブラウザ上で動作するプログラムを何というか述べよ。
答え: javaアプレット
05 Webブラウザ上で動作するjavaプログラムを他の方法で実行するコマンドは何と言うか述べよ。
答え:appletviewer
06 サーバ上で動作するjavaプログラムを何というか述べよ。
答え:サーブレット
07 メインメソッドを定義せよ。
答え:public static void main()[]{};
08 標準出力を使用し、"Hello"のみ出力せよ。
答え:System.out.print("Hello")
09 java言語には含まれていない予約語を2つ述べよ。
答え:const,goto
10 char型のサイズと保持できる値を述べよ。
答え:16ビット、UNICODE
11 データ型として整数を保持できる型を4つ述べよ。
答え: byte,short,int,long
12 参照型を2つ述べよ。
答え:クラス、配列
13 文字列や数値の連結が出来る演算子を述べよ
答え:+
14 実行のフローを分岐させる制御分を2つ述べよ。
答え:if文、switch文
15 反復処理を行う制御分を3つ述べよ。
答え: while文,do文,for文
16 例外処理を行う制御分を述べよ
答え:thorw文
17 配列の生成で使用されるキーワードを述べよ.
答え:new
18 int型の配列名aの宣言方法を2つ述べよ。
答え: int[] a ,int a[]
19 配列名aの要素数(大きさ)を述べよ。
答え:a.length
20 concatメソッドのクラスを述べよ。
答え:java.lang.String
21 int[] a={};の要素数を数値で述べよ。
答え:0
22 int型変数numが100で割り切れるかどうかを判断する制御分を述べよ。
答え:if((num%100)==0));
23 int型変数yearが、閏年かどうか判断する制御文を述べよ。
(閏年:4で割れ100で割り切れないが、400で割り切れる年)
答え:if((((year%4)==0)&&((year%100)!=0))||year%400==0);
24 次のコードを実行した後の出力値を述べよ.
  int x,y;
 x=100; x+=1;x--; y=200 +x;
 System.out.println(y++);
答え:300
25 次のコードを実行した後の出力値を述べよ.
 int a=0,x=0;
 a = 5;a +=3; x = ++a;
 System.out.println(x);
答え:9
26-1 次のコードを実行した後の出力値を述べよ.
 int a=9,b=3;
 a /=b;
 System.out.println(a%b);
答え:0
26-2 次のコードを実行した後の出力値を述べよ.
 int i,j;
 for(i=0,j=0; i<3; i++) ++j;
 System.out.println(i*j);
答え:9
27 次のコードを実行した後の出力値を述べよ.
 int i=2;
 while(i-- > 0)System.out.print(i);
答え:10
28 次のコードを実行した後の出力値を述べよ.
 int num=10000;
 for(int i=0; i<4;i++) num >>= i;
 System.out.println(num);
答え:156
29 次のコードを実行した後の出力値を述べよ.
 int num=0;
 for(int i=1;i<=10;i++){if(++num % i ==0) num++;}
 System.out.println(++num);
答え:12
30 次のコードを実行した後の出力値を述べよ.
 int a=9;
 if(a++ !=10 | a++ ==10) a++
 System.out.println(a);
答え:12

【Java試験問題の考察】

01
*javacについて

 javacツールは、Java プログラミング言語で記述されたクラスとインタフェースの定義を読み取り、
バイトコードのクラスファイルにコンパイルする。 
02
ソースコードのファイル名は .java 拡張子、クラスのファイル名は .class拡張子を持たなければならない。
〜.javaという名前のソースファイルをコンパイルすると、〜.classという名前の拡張子ができる。
03
*javaインタプリタとjavaコンパイラ

・コンパイラ(compiler)
 ソースコードを機械語や中間コードにいったん翻訳する。
 それから、翻訳後のコードを実行する。
・インタプリタ(interpreter)
 ソースコードを機械語や中間コードに通訳しながら実行する。
04
*javaアプレット

 アプレットとは、ブラウザ上で実行されるJavaプログラミングのこと。
 アプレットの用途には、アニメーションやBGM、ユーザとの対話型インターフェイスの実現など、さまざまなものがある。
(以下、レポート#2でやったので省略する。)
05
*appletviewer

 appletviewer コマンドは urls に指定されたドキュメントあるいはリソースと接続して、
そのドキュメントが参照するそれぞれのアプレットを独自のウィンドウで表示する。
06
*サーブレットについて

 サーブレット(Servle)tは、主にWebアプリケーションでの使用を想定し、Webサーバと連携して
クライアントと情報のやりとりを行いながら、処理を行っていくのが特徴。
07
メインメソッドは、

public static void main()[]{};

と定義します。  
08
"Hello"のみ出力するするには、

System.out.print("Hello") 

とする。
*このときplintlnにすると、改行もしてしまうので注意。(ってか、もう遅い。。) 
09
*const,gotoについて

 Java言語には、const,gotoは含まれていない!

予約語には、
・原始型およびその値を表す予約語(例 byte,char,…)
・クラス、オブジェクト、パッケージに関連する予約語(例 class,interface,…)
・クラス、メンバーの記述に用いられる修飾子の予約語(例 public,static,…)
・制御構造に関連する予約語(例 for,while,…)
・例外処理に関連する予約語(例 catch,throw,…)
がある。

 以上の 48語の他に const, goto の 2語は、使用されないが予約はされている。
 したがってプログラマーが独自の用途に使用することはできない。 
10
*char型のサイズと保持できる値

char→16ビット、Unicode文字
●表現範囲(¥u0000〜¥uFFFF)
11
*データ型として整数を保持できる型

byte→8ビット符号付き整数
●表現範囲(-128〜127)

short→16ビット符号付き整数
●表現範囲(-32768〜32767)

int→32ビット符号付き整数
●表現範囲(-2147483648〜214748647)

long→64ビット符号付き整数
●表現範囲(-9223372036854775808〜9223372036854775807)
12
*参照型

 クラスと配列を扱う変数の型のことを参照型と呼ぶ。
「参照」という言葉は、データの置かれているアドレスを意味している。
13
*文字連結演算子

 文字列は+演算子で連結すつることができる。 
 +演算子は通常は数値加算を行うが、どちらかの要素が文字列の場合、文字列連結が行われる。
 その際、数字要素は文字列表現に変換される。
14
*フロー分岐制御分

if文→2方向分岐
switch文→多方向分岐
(以下、レポート#3でやったので省略する。)
15
*反復処理制御分

for文→指定回数反復
while文→前判定型不定回数反復
do文→後判定型不定回数反復
16
*例外処理制御分

 プログラムは実行時ひいろいろなエラーを発生させる。またエラーではないが、何かの対処を必要とする状況も発生する。
・エラー例:存在しないファイルをオープンしようとした。
・非エラー例:ファイルから正常入力中にデータが終了した。
 この両者の状況が発生したらそれぞれに適切な対処が必要となる。
 このようなプログラム実行時に発生する特殊状況をJavaは「例外処理」という機能で検出し処理する。
 例外処理で検出するのは「エラー発生」と「状況変化」。

throw文→例外を発生させる。
17
*配列生成
 new演算子はクラスのインスタンスを生成します。
18
*int型の配列a宣言方法

int型の配列a宣言方法には
   int[] a;
   int a[];
がある。
19
配列の要素数を取得するには.lengthを使う。
20
*concatメソッド

concatのメソッドはjava.lang.Stringです。
"文字列".concat("文字列")
指定した 2 つ以上の文字列を連結し、連結した文字列を格納した文字列の値を返す。
21
int[]=a{};の要素数は0になる。
22
int型変数numが100で割り切れるかどうかを判断する制御分は、

if((num%100)==0)); //もしnumが100で割って余りが0になればという意味。 
23
int型変数yearが、閏年かどうか判断する制御文は

if((((year%4)==0)&&((year%100)!=0))||year%400==0);    
   //yearが4で割れて、かつ100では割り切れない。また、400では割り切れる。
24
  int x,y;
 x=100; x+=1;x--; y=200 +x;      //xは100,100に1をたしてxは101,101-1でxは再び100。y=200+300
 System.out.println(y++);     //y++は後加算なので301になる前の値の300が表示される。 

実行結果:300
25
 int a=0,x=0;
 a = 5;a +=3; x = ++a;   //aの値は5+3で8になり、8+1=9になる。
 System.out.println(x);   //よって、9が表示される。 

実行結果:9
26-1
 int a=9,b=3;
 a /=b;           //a=9/3で3になる。
 System.out.println(a%b); //3/3の値で0あまるので0が表示される。  

実行結果:0
26-2
 int i,j;
 for(i=0,j=0; i<3; i++) ++j;  //iは1づつ増加し、jも1づつ増加してi=3,j=3
 System.out.println(i*j);     //i*jで、3*3=9になる

実行結果:9
27
 int i=2;
 while(i-- > 0)System.out.print(i);  //iを1づつ減らして、iが0より大きい限りiを表示していく。
                     //よって、10と表示される。
実行結果:10
28
 int num=10000;                      //10000はbit表示で表すと10011100010000
 for(int i=0; i<4;i++) num >>= i;  //iは0から3まで1づつ増加していく。
                   //この時、1づつ増えるたびにnumを左にビットシフトしていく。 
                   //まず、1ビット左シフトで1001110001000
                   //次に、2ビット左シフトで10011100010
                   //最後に、3ビット左シフトで10011100
                   //よって、10011100となり、10進数で表すと156となる。
 System.out.println(num);

実行結果:156
29
 int num=0;
 for(int i=1;i<=10;i++){if(++num % i ==0) num++;} //for文のなかでiが10になるまで{}を繰り返す。
              //もし、numに1加えたものをiで割ったあまりが0ならnumに1を加える
 System.out.println(++num);                       //最後に11に1をたして12と表示される。

実行結果:12
30
 int a=9;                 
 if(a++ !=10 | a++ ==10) a++              //まず、a(=9)と10が違うか調べたあとに、aに1を加え、
                        a(=10)を同じか比べたあと、aに1を加える。
                    //ここで、左と右のどちらかが真ならaに1を加え、結果、12が表示される。
 System.out.println(a);

実行結果:12

☆【オブジェクト指向プログラム】へ

【参考文献・URL】

・浅煎り珈琲〜Java アプリケーション入門 (http://msugai.fc2web.com/java/#objective) ・JAVA言語入門 (http://black.sakura.ne.jp/~third/programming/java/java.html) ・Java入門 (http://www5c.biglobe.ne.jp/~ecb/java/java00.html)