![]()
平成29年 秋期 基本情報技術者 午後 問11
問11 Java
次のJavaプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 〔プログラムの説明〕 文字列の配列を要素にもつ配列で表現された表中の行を,並べ替えるプログラムである。 表は行の配列として,行は文字列の配列として構成される。各行の指定した列が, 指定した順序に並ぶように,行を並べ替える。 図1は,表の最左列の文字列を辞書順に,最左列の文字列が等しい行は右隣の列の 文字列を数値とみなしたときに降順になるように並べ替えた例である。
![]() 図1 並べ替えの例 クラス TableSorter は,表中の行を並べ替える機能を提供する。 次のメソッドと入れ子クラス OrderBy をもつ。 (1) putSortOrder(String key, Comparator<String> order) ― このクラスのメソッド sort で 指定可能な順序を登録する。 order ― インタフェース Comparator 型のオブジェクトで, key で指定した順序指定子が示す順序を規定する。 (2) Sort(String[][] table, final OrderBy... orderBys) ― 条件として指定した列が 指定した順序になるように,表中の行を並べ替える。条件は複数指定できる。 並び順の決定には先に指定した条件が優先される。先に指定した条件で並び順が 決まらない行については,後に指定した条件を加えて決定する。指定した全ての 条件で順序が決まらない行については,並べ替える前の並び順を維持する。 orderBys ― 条件を必要なだけ指定する。 クラス TableSorter の入れ子クラス OrderBy は並べ替えの条件を表すクラスである。 フィールド key は順序指定子,フィールド col は比較対象の列の位置を 示す数(行を表す String 型配列の添字)である。フィールド isReversed が false であれば, この条件が表す順序が順序指定子 key で指定されるオブジェクトの メソッド compare が返す大小関係での昇順で並べ替えることを意味し,true であれば, 降順で並べ替えることを意味する。 クラス TableSorterTester はテスト用のプログラムである。 実行結果を図2に示す。
〔プログラム1〕 import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Map; public class TableSorter { private Map< a > orderMap = new HashMap< a >(); public void putSortOrder(String key, Comparator<String> order) { orderMap.put(key, order); } public void sort(String[][] table, final OrderBy... orderBys) { Arrays.sort(table, new Comparator<String[]>() { public int compare(String[] s1, String[] s2) { for ( b ) { int order = orderMap.get(orderBy.key). compare(s1 c , s2 c ); if (order d Ø) { return e ; } } return Ø; } }); } public static class OrderBy { final String key; final int col; final booleam isReveresd; public OrderBy(String key, int col) { this(key, col, false); } public OrderBy(String key, int col, boolean isReversed) { this.key = key; this.col = col; this.isReversed = isReversed; } } } 〔プログラム2〕 import java.util.Comparator; public class TableSorterTester { public static void main(String... args) { String[][] data = new String[][] { {"apple", "3", "1,ØØØ"}, {"cherry", "1", "1,ØØØ"}, {"banana", "1", "3,ØØ"}, {"banana", "2", "2,ØØØ"}, {"apple", "2", "3ØØ"}, }; TableSorter sorter = new TableSorter(); sorter.putSortOrder("lex", new Comparator<String>() { public int compare(String o1, String o2) { return o1.compareTo(o2); } }); sorter.putSortOrder("num", new Comparator<String>() { public int compare(String o1, String o2) { return new Integer(o1).compareTo(new Integer(o2)); } }); sorter.sort(data, new TableSorter.OrderBy("lex", Ø), ←α new TableSorter.OrderBy("num", 1, true)); ←α for (String[] row : data) { for (String col : row) { System.out.printf("%s ", col); } System.out.println(); } } }
a に関する解答群 ウ String, Comparator<String> エ String, String b に関する解答群 イ int i = Ø; i < table.length; i++ ウ OrderBy orderBy : orderBys エ String[] row : table c に関する解答群 ウ [cot] エ [orderBy.col] d に関する解答群 e に関する解答群 イ order ウ orderBy.isReversed ? -order : order エ orderBy.isReversed ? order : -order
sorter.sort(data, new TableSorter.OrderBy("lex", 2), new TableSorter.OrderBy("lex", Ø)); 解答群 エ banana 2 2,ØØØ オ cherry 1 1,ØØØ
sorter.putSortOrder("numC", new Comparator<String>() { public int compare(String s1, String s2) { return new Integer(s1.replace(",", "")). compareTo(new Integer(s2.replace(",", ""))); } }); sorter.sort(data, new TableSorter.OrderBy("nunC", 2), new TableSorter.OrderBy("lex", Ø)); 解答群 エ banana 2 2,ØØØ オ cherry 1 1,ØØØ
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||||||