Report#4

課題

第1回Java試験問題を解答を解説し、その動作について考察せよ。併せて、講義資料オブジェクト指向プログラJavaIの中のサンプルプログラムについて考察せよ。

Q1.Javaのソースファイル(Sample.java)をコンパイルせよ
A.javac Sample.java

Q2.Javaソースファイル(Sample.java)をコンパイルした後にできるファイル名を述べよ。
A. Sample.class

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

Q4.Javaアプリケーションにたいして、Webブラウザ上で動作するプログラムを何と言うか述べよ。
A. Java Applet

Q5.Webブラウザ上で動作するJavaプログラムをほかの方法で実行するコマンドは何と言うか述べよ。
A. applet viewer

Q6.サーバ上で動作するJavaプログラムを何と言うか述べよ。
A. JavaServlet 

Q7.メインメソッドを定義せよ。
A.public static void main(String arg[]){}

Q8.標準出力を使用し、"Hello"のみ出力せよ。 
A.System.out.print("Hello")

Q9.Java言語には含まれていない予約語を2つ述べよ。
A. const, goto

Q10.char型のサイズと保持できる値を述べよ。
A. 16bit, 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. thorow, try, catch, finally

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.if(year%4==0 && year%100!=0 || year%400==0)

Q24〜Q30

public class rep4{
    public static void main(String argv[]){
        System.out.print("Q24:");
        Q24();
        System.out.print("Q25:");
        Q25();
        System.out.print("Q26:");
        Q26_1();
        System.out.print("Q26:");
        Q26_2();
        System.out.print("Q27:");
        Q27();
        System.out.print("Q28:");
        Q28();
        System.out.print("Q29:");
        Q29();
        System.out.print("Q30:");
        Q30();
    }
    public static void Q24(){
        int x,y;                                              //xとyを宣言する
        x = 100; x += 1; x--; y = 200 + x;    //xに100を代入、xにx+1を代入、xから1引く、yに200+xを代入する
        System.out.println(y++);                    //yの値を出力した後、yに1足す
    }
    public static void Q25(){
        int a=0, x=0;                                      //a=0、x=0を宣言する
        a = 5; a += 3; x = ++a;                       //aに5を代入、aにa+3を代入、xにa+1を代入する
        System.out.println(x);                        //xの値を出力する
    }
    public static void Q26_1(){
        int a=9, b=3;                                      //a=9、b=3を宣言する
        a /= b;                                               //aにaをbで割った値を代入する
        System.out.println(a %= b);               //aをbで割った余りの値を出力する
    }
    public static void Q26_2(){
        int i, j;                                               //iとjを宣言する
        for(i=0,j=0; i<3; i++) ++j;                 //iとjを0にし、iが3未満の場合iを+1し、jに+1する
        System.out.println(i * j);                   //iとjの値を掛けた値を出力する
    }
    public static void Q27(){
        int i=2;                                              //i=2を宣言する
        while(i-- >0) System.out.println(i);    //iが0より大きいか判定した後iに-1し、iの値を出力する
    }
    public static void Q28(){
        int num=10000;                                 //num=10000を代入する
        for(int i=0; i < 4; i++) num >>=i;        //iを宣言し0を代入、iが4未満の場合iを+1し、numの値をiの値の分だけ右にシフトする
        System.out.println(num);                   //numの値を出力する
    }
    public static void Q29(){
    int num=0;                                             //num=0を宣言する
    for(int i=1; i <=10; i++)                         //iを宣言し1を代入、iが10以下の場合iを+1する
    {if(++num % i ==0) num++;}                   //+1したnumの値をiで割った余りが0ならnumに+1する
    System.out.println(++num);                    //+1したnumの値を出力する
    }
    public static void Q30(){
        int a = 9;                                            //a=9を宣言
        if(a++ != 10 | a++ == 10) a++;            //+1したaの値が10でない、またはさらに+1したaの値が10ならばaに+1する
        System.out.println(a);                        //aの値を出力する
    }
}


A.24〜A.30

Q24:300
Q25:9
Q26:0
Q26:9
Q27:1
0
Q28:156
Q29:12
Q30:12
講義資料プログラム
class CircleC {
    double pai = 3.14;      //paiを宣言、3.14で初期化
    double circle(int r) {      //メソッド
        return pai * r * r;      //pai*r*rの値を返す
    }
}
class test1 {
    public static void main(String args[]) {      //メソッド
        double area;      //areaを宣言
        CircleC obj;      //Circlecの変数objを宣言
        obj  = new CircleC();      //Circlecのオブジェクトを生成、objに代入
        area = obj.circle(10);      //circle()に10入れた値をareaに代入
        System.out.println("area = " + area);      //文字列area=数値areaの表示
    }
}
area = 314.0
class test2 {
    public static void main(String args[]) {
        Display obj = new Display();   // インスタンス作成
        obj.Disp("Hello Java");        // オブジェクトobjのメソッドDispを呼ぶ
    }
}
class Display {                    // クラスDisplayの定義
    void Disp(String message) {      // メソッドDispの定義
        System.out.println(message);      //表示
    }
}
Hello Java
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 test3 {    //クラス
    public static void main(String args[]) {   //メソッド
        int a, b, wa, sa, seki, sho;    //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

考察

・オブジェクト指向とは

他のプログラムのメソッドを呼んで処理させるもの。用途や目的にあったメソッドをあらかじめ作っておきそれを呼び出して処理すること。

・クラスフィールド

クラスのインスタンスではなく、クラスフィールドが定義されているクラスそのものに関連付けされている。

・クラスメソッド

クラスフィールドと同じように宣言する。

・インスタンスフィールド

static修飾子を指定せずに宣言したフィールドは、全てインスタンスフィールド。

・インスタンスメソッド

static修飾子を指定せずに宣言したメソッドは、全てインスタンスメソッド。


感想

もうなにがになやらで終えた次第であります。

参考
Javaクイックリファレンス
初体験JAVA 丸の内とら 著