平成16年 春期 基本情報技術者 午後 問08(Java)

Print Friendly, PDF & Email

ここでは、当社の新人研修受講者に向けて、基本情報のJavaの過去問を掲載しています。

想定しているのは、NetBeansなどのIDEにコピー・ペーストしたうえで、自分の正しいと思う答えを埋めて動作を確認するという使い方です。


次の Java プログラムの説明及びプログラムを読んで,設問に答えよ。

〔プログラムの説明〕

 このプログラムは,数量の単位変換を行う共通機能を提供するクラス群と, それらのテストプログラムからなる。 テストプログラムでは,セルシウス温度(セ氏温度,゜C)及びカ氏温度 (゜F)の変換を行うクラスを利用する。

(1) インタフェース Converter は,単位変換を行うクラスが実装すべきインタフェースを定義する。

(2) クラス ConverterRunner は,単位変換クラスを利用するプログラムからアクセスするためのクラスである。

  ① メソッド setConverter は,単位変換クラスのインスタンスを設定する。

  ② メソッド run は,単位変換クラスのメソッド convert を呼び出す。

(3) クラス CtoF は,セ氏温度の値を,カ氏温度に変換する処理を実装するクラスである。

(4) クラス FtoC は,カ氏温度の値を,セ氏温度に変換する処理を実装するクラスである。

(5) クラス TestConverter は,単位変換クラスを利用するテストプログラムである。メソッド main は,実行すべき単位変換処理(1 : カ氏-セ氏変換, 2 : セ氏-カ氏変換,q : 終了)の選択を促してから, 入力された値を指定された処理に従って変換する。 実行例を図に示す。

Type 1(FtoC), 2(CtoF), or q(Quit): 1
Type input value: 68
20.0

   図 クラス TestConverter の実行例

[プログラム1]

public interface Converter {
    /*  a  */;
}

[プログラム2]

public class ConverterRunner {
   private /*  b  */ conv;
   public void setConverter(/*  b  */ conv) {
      this.conv = conv;
   }
   public void run(String input) {
      if (conv == null) return;
      try {
         double in = Double.parseDouble(input);
         double out = conv.convert(in);
         System.out.println(out);
      } catch (NumberFormatException e) {
         System.err.println("invalid input " + input);
      }
   }
}

[プログラム3]

public class CtoF /*  c  */ {
   public double convert(double input) {
      return 9.0 / 5.0 * input + 32.0;
   }
}

[プログラム4]

public class FtoC /*  c  */ {
   public double convert(double input) {
      return 5.0 / 9.0 * (input - 32.0);
   }
}

[プログラム5]

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class TestConverter {
   public static void main(String[] args) {
      // 標準入力から入力を受け取る reader を作成する
      BufferedReader reader = 
         new BufferedReader(new InputStreamReader(System.in));
      ConverterRunner runner = new ConverterRunner();
      try {
         while (true) {
            System.out.print("Type 1(FtoC), 2(CtoF), " +
                             "or q(Quit): ");
            // 標準入力から1行読み込む
            String choice = reader.readLine();
            if ("1".equals(choice)) {
               runner.setConverter(new FtoC());
            } else if ("2".equals(choice)) {
               runner.setConverter(new CtoF());
            } else if ("q".equals(choice)) {
               break;
            } else continue;
            System.out.print("Type input value: ");
            // 標準入力から1行読み込む
            String value = reader.readLine();
            /*  d  */;
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

設問 プログラム中の/*  */に入れる正しい答えを,解答群の中から選べ。

a に関する解答群

ア abstract public void convert();

イ public double convert(double input) { }

ウ public double convert(double input);

エ public double convert(String input);

b に関する解答群

ア Converter

イ ConverterRunner

ウ CtoF

エ FtoC

c に関する解答群

ア extends Converter

イ extends ConverterRunner

ウ implements Converter

エ implements ConverterRunner

d に関する解答群

ア runner.conv.convert(Double.parseDouble(value));

イ runner.conv.run(value);

ウ runner.convert(Double.parseDouble(value));

エ runner.run(value);