基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

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

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

( Java プログラムで使用する API の説明は,この冊子の末尾を参照してください。)

〔プログラムの説明〕

英語の月名( January,…,December )を2種類の順序に並べ替えるプログラムである。 月名は,文書の索引などを作成する場合は辞書順に並べ替える必要があるが, 日付の一部として並べ替えるときは月の順番に並んだ方が都合がよい。 並べ替えは,次のクラスメソッドを呼び出して行う。

java.util.Arrays.sort(Object[], java.util.Comparator) このメソッドは,引数で与えられたComparatorのインスタンスのメソッド compare を 呼び出して配列中の要素を比較し,並べ替える。 ここでは,インタフェース Comparator を実装する次の二つのクラスを定義する。

(1) クラス NameComparator は,引数で与えられた文字列を小文字の文字列に変換し, クラス String のメソッド compareTo を呼び出して比較した結果を返すメソッドを実装している。

(2) クラスValueComparatorは,引数で与えられた文字列(月名)を 月の値(例えば,Aprilは4)に変換し,月の値で比較した結果を返すメソッドを実装している。 引数の文字列は,大文字と小文字を区別しない。 月名は,Jan,Febなど,3文字の省略形を指定してもよい。

ただし,二つのクラスともメソッド compare に与えられる月名は正しいものとする。

クラス MonthNameSorter は,上記の二つの Comparator を実装したクラスを用いて,月名を並べ替える。 メソッド main を実行した結果を,次に示す。

[December, July, DEC, June, April, May]     
[April, DEC, December, July, June, May]
[April, May, June, July, December, DEC]

〔プログラム1〕

import java.util.Comparator;
import java.util.Locale;

public class NameComparator implements Comparator<String> {
   public int compare(String s1, String s2) {
      String ls1 = s1.toLowerCase(Locale.ENGLISH);
      String ls2 = s2.toLowerCase(Locale.ENGLISH);
      return ls1.compareTo(ls2);
   }
}

〔プログラム2〕

import java.util.Comparator;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public class ValueComparator implements  {
   private static final String[] monthNames = {
      "january", "february", "march", "april",
      "may", "june", "july", "august",
      "september", "october", "november", "december"
   };
   private static final Map<String, Integer> map
                              = new HashMap<String, Integer>();
   static {
      // 月名とその値(例: may → 5)が対応するようにmapを初期化する。
      for (int i = 0; ; i++) {
         // 月名と月の値を対応付ける。
         map.put(monthNames[i], i + 1);
         // 月名の最初の3文字と月の値を対応付ける。
         map.put(monthNames[i].substring(0, 3), i + 1);
      }
   }

   public int compare(String s1, String s2) {
      String ls1 = s1.toLowerCase(Locale.ENGLISH);
      String ls2 = s2.toLowerCase(Locale.ENGLISH);
      return ;
   }
}

〔プログラム3〕

import java.util.Arrays;

public class MonthNameSorter {
   public static void main(String[] args) {
      final String[] names1 = {
         "December", "July", "DEC", "June", "April", "May"
      };
      System.out.println(Arrays.toString(names1));

      String[] names2 = names1.clone();
      Arrays.sort(names2, new NameComparator());
      System.out.println(Arrays.toString(names2));

      String[] names3 = names1.clone();
      Arrays.sort(names3, );
      System.out.println(Arrays.toString(names3));
   }
}

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

a に関する解答群

ア Comparator<int>     イ Comparator<Integer>

ウ Comparator<Object>    エ Comparator<String>

b に関する解答群

ア i < monthNames.length    イ i <= monthNames.length

ウ i > monthNames.length    エ i >= monthNames.length

c に関する解答群

ア map.get(ls1) + map.get(ls2)    イ map.get(ls1) - map.get(ls2)

ウ map.get(ls1) / map.get(ls2)    エ map.get(ls2) - map.get(ls1)

d に関する解答群

ア new Comparator()      イ new Comparator<String>()

ウ new ValueComparator()    エ new ValueComparator<String>()

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

基本情報技術者試験



[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]