Report4
		Day :2003/11/17
		ID  :035740F
		Name:根保光秀
		!!!  This Page Is Made By Shift JIS  !!!

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




もくじ

1.テスト解答

  考察

2.オブジェクト指向

3.感想・反省












Q1: javaのソースファイル(Sample.jaca)をコンパイルせよ。

A : javac Sample.java
Q2: javaのソースファイル(Sample.java)をコンパイルしたあとにできるファイル名を述べよ。

A :Sample.class
Q3: javaコンパイラに対して、実行時に使われるjavaコマンドは何と言うか述べよ。

A : javaインタプリタ
Q4: javaアプリケーションに対して,Webブラウザ上で動作するプログラムを何というか述べよ。

A : javaアプレット
Q5: Webブラウザ上で動作するjavaプログラムを他の方法で実行するコマンドは何と言うか述べよ。

A : appletviewer
Q6: サーバ上で動作するjavaプログラムを何というか述べよ。

A : サーブレット
Q7: メインメソッドを定義せよ

A : public static void main(String args[]{})
Q8: 標準出力を使用し、"Hello"のみ出力せよ。

A : System.out.print("Hello")
Q9: java言語には含まれていない予約語を2つ述べよ。

A : const,goto
Q10: char型のサイズと保持できる値を述べよ。

A : 16ビット、UNICODE
Q11: データ型として整数を保持できる型を4つ述べよ。

A : byte,short,int,long
Q12: 参照型を2つ述べよ。

A : クラス、配列
Q13: 文字列や数値の連結が出来る演算子を述べよ。

A : 文字列連結演算子
Q14: 実行のフローを分岐させる制御分を2つ述べよ.

A : if文、switch文
Q15: 反復処理を行う制御分を3つ述べよ.

A : while,do,for文
Q16: 例外処理を行う制御分を述べよ

A : thorw文
Q17: 配列の生成で使用されるキーワードを述べよ.

A : new
Q18: int型の配列名aの宣言方法を2つ述べよ。

A : int[] a int a[]
Q19: 配列名aの要素数(大きさ)を述べよ。

A : a.length
Q20: concatメソッドのクラスを述べよ。

A : java.lang.String
Q21: int[] a={};の要素数を数値で述べよ。

A : 0
Q22: int型変数numが100で割り切れるかどうかを判断する制御分を述べよ。

A : if(num%100==0)
Q23:
int型変数yearが、閏年かどうか判断する制御文を述べよ。
(閏年:4で割れ100で割り切れないが、400で割り切れる年)

A : (a%4==0 && y%100!=0) || y%400==0
Q24:
 次のコードを実行した後の出力値を述べよ。
 int x,y;
 x=100; x+=1;x--; y=200 +x;
 System.out.println(y++);

A : 300
Q25:
 次のコードを実行した後の出力値を述べよ.
 int a=0,x=0;
 a = 5;a +=3; x = ++a;
 System.out.println(x);

A : 9
Q26a:
 次のコードを実行した後の出力値を述べよ.
 int a=9,b=3;
 a /=b;
 System.out.println(a%b);

A : 0
Q26b:
 次のコードを実行した後の出力値を述べよ.
 int i,j;
 for(i=0,j=0; i<3; i++) ++j;
 System.out.println(i+j);

A : 9
Q27:
 次のコードを実行した後の出力値を述べよ.
 int i=2;
 while(i-- > 0)System.out.print(i);

A : 10
Q28:
 次のコードを実行した後の出力値を述べよ.
 int num=10000;
 for(int i=0; i<4;i++) num >>= i;
 System.out.println(num);

A : 156
Q29:
 次のコードを実行した後の出力値を述べよ.
 int num=0;
 for(int i=1;i<=10;i++){if(++num & i ==0) num++;}
 System.out.println(++num);

A : 12
Q30:
 次のコードを実行した後の出力値を述べよ.
 int a=9;
 if(a++ !=10 | a++ ==10) a++
 System.out.println(a);

A : 12







考察


  Q1&Q2

 
javaプログラムをコンパイルするにはjavacを使います。
またオプションを指定する事ができます。

オプション名 動作
-g すべてのデバック情報を生成する
-g:none デバッグ情報を生成しない
-g:{1line,vars,source} いくつかのデバック情報だけを生成する
-nowarn 警告を発生させない
-verbose コンパイラの動作についてメッセージをを出力する
-deprecation 推賞されないAPIが使用されているソースの位置を表示
-classpath < path > ユーザークラスファイルを検索する位置を指定する
-sourcepath < path > 入力ソースファイルを検索する位置を指定する
-bootclasspath < path > ブートストラップクラスファイルの位置を置き換え
-extdirs < dirs > インストール済みの拡張機能の位置を置き換える
-d < directory > 生成されたクラスファイルを格納する位置を指定する
-encoding < encoding > ソースファイルが使用する文字エンコーディングを生成する
-source < release > 指定されたリリースとソースの互換性を保つ
-target < release > 特定のVMバージョン用のクラスファイルを生成する
-help 標準オプションの概要を出力する


 コンパイルすると.classファイルが生成されます。

  Q3

実行時に使われるjavaコマンドはjavaインタプリタと言います。

  javaコンパイラはソースコードを受け取ると特定のCPUに依存しない
(全てのOS、CPU上でも実行できる)中間コードを生成します。
そして実行する時にjavaインタプリタで一行づつ翻訳しながら実行していきます。
しかし、一行づつ翻訳していくので(C言語等に比べると)実行速度が遅い。

  Q4&Q5

ブラウザ上で実行できるjavaをjavaアプレットと言います。
javaアプレットについてはreport2を見て下さい。
report2
また実行結果を確認するためにはappletviewer を使います。

  Q6

サーバ上で動くjavaをサーブレットと言います.
CGI等とよく似たものです。

  Q7

メインメソッドは
publc static void main(String args[]){}

と定義します。{}をつけないと点数はもらえないので注意して下さい

  Q8

Helloのみを表示するには
System.out.print("Hello")という風に書かなければいけません。
printlnだとよけいな改行コードがくっついてくるので今回の問題では不正解をもらってしまいます。

  Q9

javaに含まれていない予約語は gotoとconstです。

  Q10&Q11

char型のサイズは16ビット、保持できる値はUNICODEです。
また整数を扱う型はbyte,short,int,longです。
Q10&Q11まとめ
型名 サイズ 範囲or値
byte 1 byte -127〜128
short 2 byte -32768〜32767
int 4 byte -2^31〜2^31-1
long 8 byte -2^63〜2^63-1
char 16 byte Unicode

  Q12

参照型はクラスと配列です。
 参照型とは、プログラム中で生成したオブジェクトを参照する時に
使われる変数の型の事で、オブジェクト自体を格納しているのではなく
オブジェクトのアドレスを格納しています。

  Q13

文字や数字を連結させるには"文字列連結演算子"を使います。

System.out.println("Netscape"+"Safari");
System.out.println("Internet Explorer"+1234);
----------------------------------------------------
NetscapeSafari
InternetExplorer1234

  Q14

実行のフローを分岐させる制御文はif文とSwitch文です。
  if文のフローチャート


  Switch文のフローチャート



  Q15

繰り返しの制御文はfor.do.whileです。

for文のフローチャート

whileのフローチャート

doのフローチャート

  Q16

例外処理を行う制御文はthrowです。
throwを使うと、エラー処理をメソッドの呼び出し側で行う事が出来ます。

  Q17

配列の生成でのキーワードはnewです。
newはインスタンスの生成や配列領域の確保を行う演算子です。

  Q18

配列の宣言方法は
int[]=a;
int a[];
です

  Q19

配列の要素数を取得するには.lengthを使います。

  Q20

concatのメソッドはjava.lang.Stringです。
concatは指定された文字列をこの文字列の最後に連結します。
"文字列".concat("文字列")というふうに使用します。

  Q21

int[]=a{};の要素数は、
public class aaa{
    public static void main(String args[]){
        int[] a={};
        System.out.println(a.length);
    }
実行結果
0

  Q22&Q23

numが100で割り切れるか判断する制御文は
if(num%100==0);

閏年か判断するには
( (year%4==0) && (year%100!=0) ) || year%400==0

  Q24〜Q30

Q24
        int x,y;		:変数宣言
        x=100;		:xに100を代入
        x +=1;		:x=x+1(x=101)
        x--;		:x=x,x=x-1(x=100)
        y=200+x		:y=200+100(y=300)
        System.out.println("Q24:"+y++);	:yを表示してからy=y+1(y=301)


Q25
        int a=0, x=0;		:変数宣言
        a=5; a+=3; x=++a;		:aに5を代入、a=a+3(a=5),x=a+1(x=9)
        System.out.println("Q25:"+x);
		
Q26a
        int a=9,b=3;		a=9,b=3
        a/=b;		:a=a/b;(a=3)
        System.out.print("Q26:");
        System.out.println(a%=b);		a/bのあまりを表示(3/3=0)
		
Q26b
         int i,j;		変数宣言
        for(i=0,j=0;i<3;i++)++j;		i=0から3までi++&j++(i=3)(j=3)
        System.out.println("Q26:"+i*j);		:i*jを表示(3*3=9)

Q27
        int i=2;		i=2
        System.out.print("Q27:");
        while(i-->0)		i=0になるまでi=i,i=i-1
    System.out.print(i);iを表示(I=1,i=0)
        System.out.print("\n");

Q28
        int num=10000;		num=10000
        for(int i=0;i<4;i++)		i=0から3まで増加
        num>>=i;		iの数だけ右にシフト(6個右にシフトと言う事は2^6で割る、2^6=64)
        System.out.println("Q28:"+num);(num=156)
		
Q29
       int num=0;		num=0
        for(int i=1;i<=10;i++)		i=0から10までi++
       {if(++num%i ==0) num++;}++num/iのあまりが0なら++num
        System.out.println("Q29:"+ ++num);++numを表示(num=12)
		
Q30
       int a=9;		a=9
        if(a++ !=10|a++ ==10) a++;		a++(9)が10じゃないかa++(10)10なのでa++(12)
        System.out.println("Q30:"+a);
		


		
次に進む