課題
Report#4:第1回Java試験問題を解答を解説し、その動作について考察せよ。 講義資料オブジェクト指向プログラムJavaIの中のサンプルプログラムについて考察せよ。
問題解答
1JAVAのソースファイル(Sample.java)をコンパイルせよ。javac Sample.java
2Javaソースファイル(Sample.java)をコンパイルした後にできるファイル名を述べよSample.class
3Javaコンパイラに対して、実行時に使われるjavaコマンドは何というか述べよインタプリンタ
4Javaアプリケーションに対して、Webブラウザ上で動作するプログラムを何と言うか述べよアプレット
5Webブラウザ上で動作するJavaプログラムを他の方法で実行するコマンドは何と言うか述べよappletviewer
6サーバ上で動作するJavaプログラムを何というか述べよ。サーブレット
7メインメソッドを定義せよ。public static void main(String args[])
8標準出力を使用し、"Hello"のみ出力せよ。System.out.print("Hello");
9Java言語には含まれていない予約語を2つ述べよ。consto,goto
10char型のサイズと保持できる値を述べよ。16ビット、UNICODE
11データ型として整数を保持できる型を4つ述べよ。byte,short,int,long
12参照型を2つ述べよ。クラス、配列
13文字列や数値の連結が出来る演算子を述べよ。+
14実行のフローを分岐させる制御分を2つ述べよ。if文、switch文
15反復処理を行う制御文を3つ述べよ。while文、do~while文、for文
16例外処理を行う制御文を述べよ。throw文
17配列の生成で使用されるキーワードを述べよ。new演算子
18int型の配列名aの宣言方法を2つ述べよ。int[] a,int a[]
19配列名aの要素数(大きさ)を述べよ。a.length
20concatメソッドのクラスを述べよ。java.lang.String
21int[]a={};の要素数を数値で述べよ。0
22int型変数numが100で割り切れるかどうかを判断する制御文を述べよ。if(num%100==0)
23int型変数yearが、閏年かどうかを判断する制御文を述べよ。(閏年:4で割れ100で割り切れないが、400で割り切れる年)(a%4==0 && y%100!=0) || y%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
26a次のコードを実行した後の出力値を述べよ。
int a=9, b=3;
a /= b;
System.out.println(a %= b);
0
26b次のコードを実行した後の出力値を述べよ。
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


考察

1,2,3
javaをコンパイルするには javacソースファイル名 と入力する。すると.class ファイルができる。
実行するコマンド javaクラス名 をインタプリンタと言う。

4,5,6
Webブラウザ上で動作するjavaプログラムをアプレッドといい実行する方法はWebブラウザ上で実行する方法とappletviewerコマンドを利用する方法の2つがある。
javaはサーバー上で実行されるプログラムを作成することもできる。これをサーブレッドという。

7
メインメソッドとは、javaプログラムの主要な入り口で public static void main{}として宣言しなければならない。 publicはメソッドが誰でも使用できることを示します。 stasicはフィールドがクラスフィールドであることを示します。 voidはメソッドに返り値がないことを示します。

8
Helloのみを出力するので改行したら\nがはいることになるのでSystem.out.printlnではなくSystem.out.printが正解

9
constogotoは予約語だがjava言語には含まれていない

10,11
char型はサイズは16ビットで保持できる値はUNICODE
整数を保持できる値はbyte,short,int,longです。
詳しくは下の表を
サイズ保持できる値
boolean1ビットtrueまたはfalse
char16ビットUNICODE
byte8ビット符号付き整数
short16ビット符号付き整数
int32ビット符号付き整数
long64ビット符号付き整数
float34ビットIEEE 754 浮動小数点数
double64ビットIEEE 754 浮動小数点数


12
参照型とは付加的なデータ型でクラス配列があります。

13
文字列と数値を連結するには、演算子を使います。これを文字列連結演算子といいます。

14,15,16
分岐させる制御文は2分岐するifと、多分岐するswitchがあります。
反復処理する制御文は、for,while,do~whileがあり、条件がみたされるまで繰り返します。
例外処理する制御文はthrowで例外である合図をします。

17,18,19
配列とは同じ型の値をまとめて記憶することができます。
配列を使うには (1)配列を宣言する。(2)配列の要素を確保する。ことが必要になります。
(1)を行うにはint[] aまたはint a[]の2種類あります。
(2)を行うにはnew演算子を使います。
int型で配列名aを利用し配列を作ってみると
int a[];
a=new int[]
となります。
又、配列の長さを表すにはlengthを利用し、配列aの要素数を表すには
a.length
と記述します。

20
クラスとはプログラムを効率良く利用するためにコードを分類したもの
concatメソッドはjava.lang.Stringというクラスに格納されています。

21
int[]a={};の要素数は数字が入ってないので

22
100で割り切れるか判断するには2方向分岐の制御文であるifを用いて if(num%100==0)

24
プログラム-------------------------------------
 class test24
{
    public static void main(String[] args) {
    int x,y;
    x=100; x +=1; x--; y=200+x;
    System.out.println(y++);
    }
}    
実行結果---------------------------------------
j03009% java test24
300
------------------------------------------------
xに100、yに200を代入しxに+1、−1してyと足す。

25
プログラム-------------------------------------
class test25
{
     public static void main(String[] args){
     int a=0, x=0;
     a=5; a +=3; x=++a;
     System.out.println(x);
     }
}     
実行結果----------------------------------------
j03009% java test25
9
------------------------------------------------
aに0,xに0を代入。aに5を代入、a+3してaに代入。xにa+1を代入。

26a
プログラム--------------------------------------
class test26a
{
    public static void main(String[] args){
    int a=9, b=3;
    a /=b;
    System.out.println(a%=b);
    }
}    
実行結果----------------------------------------
j03009% java test26a
0
------------------------------------------------
aに9,bに3を代入。aをbで割ってaに代入。aをbで割った余りを表示

26b
プログラム---------------------------------------
class test26b
{
     public static void main(String[] args){
     int i, j;
     for(i=0,j=0; i<3; i++) ++j;
     System.out.println(i*j);
     }
}     
実行結果-----------------------------------------
j03009% java test26b
9
-------------------------------------------------
iに0,jに0を代入。iを3になるまで足す。iに足した数をjにも足す。iかけるjを表示

27
プログラム---------------------------------------
class test27
{
    public static void main(String[] args){
    int i=2;
    while(i-->0)
    System.out.print(i);
    }
 }   
 実行結果-----------------------------------------
 j03009% java test27
 10
 
-------------------------------------------------
iに2を代入。2>0が成り立つので1を引く,1が表示される。
1>0が成り立つので1を引く、0が表示される。
0>0が成り立たないので終わり。

28
 プログラム---------------------------------------
 class test28
{
    public static void main(String[] args){
int num=10000;
for(int i=0; i<4; i++) num >>= i;
System.out.println(num);
}
}
 実行結果-----------------------------------------
java test28
156
--------------------------------------------------
numに10000を代入。iに1を代入。
1<4が成り立つので、2進数にして1ビット右にずらす。
2<4が成り立つので、さらに2ビット右にずらす。
3<4が成り立つので、さらに3ビット右にずらす。
4<4が成り立たないので終わり。

29
プログラム----------------------------------------
class test29
{
    public static void main(String[] args){
    int num=0;
    for(int i=1;i<=10;i++){
    if(++num%i==0)num++;
    }
    System.out.println(++num);
    }
 }
実行結果------------------------------------------
j03009% java test29
12
--------------------------------------------------
numに0を代入。iに1を代入。
num=1,num=2
i=2のときnum=3
......
i=10のときnum=11
num+1を表示。

30
プログラム-----------------------------------------
class test30
{
    public static void main(String[] args){
    int a=9;
    if(a++!=10 | a++ ==10)a++;
    System.out.println(a);
    }
 }
実行結果-------------------------------------------
j03009% java test30
12
---------------------------------------------------
aに9を代入。9!=10|9=10がtrue|falseになっているので
a+1+1+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
考察--------------------------------------------
オブジェクトとは宣言したクラスを使用するために使うものです。
newを使ってオブジェクトを実行します。()ないの数字がrに代入されます。

 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
  
考察-----------------------------------------------------
Comp4 各メソッドで四則演算を定義しておく。
Keisan a,bにそれぞれ20,10を代入。
Comp4のオブジェクトを作成
変数waにComp4のaddをxにa,yにbを入れて実行
変数saにComp4のsubstractをxにa,yにbを入れて実行
変数sekiにComp4のmultiplyをxにa,yにbを入れて実行
変数shoにComp4のdivideをxにa,yにbを入れて実行
wa,sa,seki,shoを出力。



感想
このレポートはどう考察していいのか悩んだので、自分にできる範囲でやったがどうでしょう。

参考文献
やさしいJava
javaクイックリファレンス