Java 演習問題


  1. オブジェクト指向プログラミング
  2. Java の構成要素
  3. クラスとオブジェクト
  4. クラスの拡張
  5. 配列
  6. 文字列
  7. 例外
  8. 入出力
  9. スレッド
  10. ネットワーク
  11. JDBC
  12. java ツール

  1. オブジェクト指向プログラミング

    1. オーバロードとオーバライドの違いはなんですか?

  2. Java の構成要素

    1. 基本型 boolean とオブジェクト型 Boolean があるのはなぜですか?

    2. NaN を生成するプログラムを書き、それを印刷してみましょう。
      また、isNaN() を使ってみましょう。 NaN.java

    3. HelloWorld クラスを次のように変更しなさい。 Hello.java

      • 文字列は名前つき定数で定義します。
        例: String msg = "Hello World !!";
      • void print() メソッドでそれを表示するようにします。

    4. 上記 B と C を1つのプログラムにまとめなさい。
      それぞれ別のメソッドを作ります。 NaNHello.java

  3. クラスとオブジェクト

    1. Body クラスに main() を作り、 そこで太陽、地球、月を登録します。
      その関係を印刷するメソッド toString() をつくりなさい。 BodyUp.java

    2. システムプロパティを表示するプログラムを書きなさい。 Prop.java
      ヒント:java.lang.System の getProperties を参照のこと。

    3. 以下のプログラムのコンパイル・エラーを解決し実行してみましょう。 ERRUp.java
      
         class ERR {
            public static void main(String[] args) {
               static final int MAX_ARGS = 8;
               for (int i=0; i< args.length && i< MAX_ARGS; i++)
                  System.out.println(args[i]);
            }
         }
        

    4. isNaN には、2つの異なるメソッドがあります。 前章で作った NaN.java を変更して、両方使ってみましょう。 NaNUp.java

  4. クラスの拡張

    1. class X,Y の例に main メソッドを加え、 表のように mask をトレースするための出力文を入れて、確認しなさい。 Yup.java

    2. SuperShow のプログラムで print メソッドの部分を main に入れると どうなりますか?
      その理由を説明しなさい。

    3. 今の日時と月日を表示するプログラムを書きなさい。 D.java
      ヒント:java.util を参照のこと。

  5. 配列

    1. コマンド行で与えた引数を逆順に出力するプログラムを書きなさい。 Args.java
      
      出力形式
      
      No    Len   Args
      2]    3     CCC
      1]    2     BB
      0]    1     A
        

    2. Class クラスを使って、Float クラスのフィールドとメソッドを表示しなさい。 Cls.java
      ヒント:java.lang.Object の getClass() を参照のこと。

    3. コマンド行で入れた10個以内の整数値を大きい順に並べる プログラムを書きなさい。 Sort.java

    4. java.util.Stack を使って、 コマンド行で入力したデータをスタックに入れたあと、
      それを取り出すプログラムを書きなさい。 Stk.java

  6. 文字列

    1. 固定長の文字列を作るクラス FixlenStr を作りなさい。 FixlenStr.java
      以下の3つのメソッドを作ります。
      
      public String toFixlenStr(int data,int fixlen,int direction,char pad_char);
      public String toFixlenStr(String data,int fixlen,int direction,char pad_char);
      public String toFixlenStrHex(int data,int fixlen,int direction,char pad_char);
      
      data      : 与えるデータ
      fixlen    : 生成する文字列の長さ
      direction : 固定長にするためにつめる pad_char を入れる場所(前、後)
      pad_char  : 固定長にするためにつめる文字(例:' ','0' 等)
      
      また direction は、以下のように定数で定義しましょう。
      static final int PRE  = 1;
      static final int POST = 2;
        

    2. 10進数を含む文字列を、コンマによって3桁ずつ区切るように変換する メソッドを作りなさい。例えば文字列 1543729 を与えると結果は 1,543,729 です。 Decimal.java

    3. 上記のメソッドを変更し、桁を区切る文字と桁数を変更できるように しなさい。 DecimalUp.java
    4. quotedString は、 入力文字列から1つの部分文字列しかとりだせない。 該当する文字列をすべて取りだし、その配列を返すように quotedString を書き換えなさい。 QstrUp.java

  7. 例外

    1. 次のコードをコンパイルして実行できるように、完成させなさい。 Exp.java

      このコードをループの中に入れ、はじめは0による除算を起こし、 次は配列外参照例外が起こるようにしなさい。
      paintAll() と dispose() は、オブジェクト cg と comp に対する空のメソッド としなさい。
      
           try {
              a[i] /= j;
              comp.paintAll(cg);
           }  catch (ArithmeticException e) {
                System.out.println("Catch ArithmeticException");
           }  catch (ArrayIndexOutOfBoundsException e) {
                System.out.println("Catch ArrayIndexOutOfBoundsException");
           }  finally  {
                cg.dispose();
           }
        

    2. このディレクトリに指定ファイルがあるか調べ、ないときは FileNotFoundException を返しなさい。 Ls.java

  8. 入出力

    1. UNIX のコマンド cat を書きなさい。 コマンド行からテキストファイル名リストを受け取り、 その内容を標準出力に書き出します。 Cat.java

    2. コマンド行で指定したファイルを読んで、16 進ダンプする プログラムを書きなさい。 Dmp.java
      
      出力形式
               0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F   0123456789ABCDEF
      000000|  ca fe ba be 00 03 00 2d|00 90 03 00 00 00 01 03         -
      000010|  00 00 00 10 03 00 00 00|20 03 00 00 00 2f 03 00               /
      000020|  00 00 7f 08 00 49 08 00|4a 08 00 4b 08 00 4c 08      I  J  K  L
      000030|  00 5c 08 00 71 08 00 8e|08 00 8f 07 00 65 07 00   \  q        e
        

    3. コマンド行で指定したファイルを読んで、指定された単語を検索し、 その単語があるすべての行を表示するプログラムを書きなさい。 Token.java
      ヒント:java.io.StreamTokenizer を参照のこと。

    4. コマンド行で指定したファイルを読んで、指定された文字がはじめに あらわれる行番号を表示するプログラムを書きなさい。 FindChar.java

    5. コマンド行で指定したファイルを読んでそれに含まれる全単語を逆順に表示する プログラムを書きなさい。ファイルは ASCII で書かれているとします。 Reverse.java
      サンプルデータとして ABOUT_APACHE を使ってください。
      ヒント:java.io.StreamTokenizer,java.util.Vector を参照のこと。

    6. コマンド行で指定したファイルを読んでそのクロスリファレンスをつくる プログラムを書きなさい。ファイルは ASCII で書かれているとします。 Cross.java
      サンプルデータとして ABOUT_APACHE を使ってください。
      ヒント:java.io.StreamTokenizer,java.util.Hashtable を参照のこと。
      
      出力形式
      
      Apache               : 2,8,13,16,31,43,49,53,57,62,65,68,73,98,123,132,164,186,197,199,217,228,232,234,237
      Applications         : 21
      Approximately        : 174
      April                : 44,191
      Aram                 : 89
      Area                 : 28
      August               : 58
      Bay                  : 28
      Beginning            : 112
      Behlendorf           : 26,33,75
        

  9. スレッド

    1. 2つのクラスを Thread を拡張して書きなさい。
      1つの run() メソッドでは "I like tea" と表示し、 もう1つの方では "I like coffee" と表示させます。 これらのクラスのインスタンスを作りスタートさせる main() メソッドを つくり、実行してみよう。 Drinks.java

    2. 上記クラスを交互に実行するようにしなさい。

    3. 10個のスレッドを生成し、それらの名前を表示しなさい。 Ten.java

    4. testPrime.java を使って、 素数かどうか判定するプログラムを作りなさい。 Prime.java
      ヒント:java.lang.Thread の join() を参照のこと。

    5. PipedInputStream と PipedOutputStream は、単純なスレッド間の 非同期通信をサポートします。
      これを使って Model.java を書き換えなさい。 ProCon.java

  10. ネットワーク

    1. コマンド行にホスト名を入れるとその IP アドレスを、 IP アドレスを入れるとそのホスト名を出力するプログラムを作りなさい。 Lookup.java

      注意:osaka のホスト名は osaka.it.ns-sol.co.jp でもあります。

    2. コマンド行で指定したポートが TCP で利用できるかを調べるプログラムを作りなさい。 PortStat.java

      ヒント:通常 bind(portno) すると、ポートの状態を知ることができます。
      
      出力形式
      
      osaka-8] java PortStat 1527 1530
       Port Status
      ----- -----------------------------
       1527 is not available : Address already in use
       1528 is not available : Address already in use
       1529 is available
       1530 is available
        

    3. Web ページをダウンロードするプログラムを作りなさい。 ダウンロードする Web ページはコマンド行で指定しますが、無指定の場合は http://perugia/java/java_idx.html です。 Web ページは日本語をふくむテキストファイルです。 Web.java

  11. JDBC

    1. DatabaseMetaData の一部を表示しなさい。また
      SQL>describe emp;
      で得られるような、EMP 表の全カラムのデータを表示しなさい。 Desc.java

    2. scott/tiger の Emp 表に EMPNO 507 と 1500 があれば削除して、 新たに以下のデータを追加し、それを確認しなさい。 InsertExample.java
            1500   LESLIE
             507   MARSHA
          

  12. java ツール

    1. javap を使って Throwable クラスの全メソッドのシグネチャを表示しなさい。

    2. javadoc を使って html を作ってみましょう。