平成25年秋期試験午後問題 問11
問11 ソフトウェア開発(Java)
次のJavaプログラムの説明及びプログラムを読んで,設問1~3に答えよ。
(Javaプログラムで使用するAPIの説明は,こちらを参照してください。
〔プログラムの説明〕
ディレクトリパス(以下,パスという)から木構造を生成するプログラムである。
パスは,木構造をもつファイルシステムにおいてディレクトリを特定するために利用される文字列であり,ディレクトリの名前を"/"で区切って並べて表す。"/"で始まるパスを絶対パスという。絶対パスはルートディレクトリを起点として表したパスである。"/"で始まらないパスを相対パスという。相対パスは任意のノードを起点として表したパスである。
このプログラムが生成する木構造中の各ノードは,それぞれが一つのディレクトリを表し,ルートノードはルートディレクトリを表す。
図1に木構造の例を示す。図1中の楕(だ)円一つはノード一つに対応し," と " で囲まれた文字列はノードの名前を表す。ルートノードの名前は空文字列とする。例えば,ノード usr を特定する絶対パスは"/usr"であり,ノード usr を起点とする 相対パス"local/lib" が特定するノードは,絶対パス"/usr/local/lib"が 特定するノードと同じノード lib である。 クラス DirectoryNode は木構造を構成するノードを表すクラスであり,一つのインスタンスが一つのノードを表す。フィールド name はノードの名前を,フィールド parent は親ノードヘの参照を,フィールド children は子ノードのリストを保持する。引数を取らないコンストラクタはルートノードを生成する。
クラス DirectoryNode は次のメソッドをもつ。
(Javaプログラムで使用するAPIの説明は,こちらを参照してください。
〔プログラムの説明〕
ディレクトリパス(以下,パスという)から木構造を生成するプログラムである。
パスは,木構造をもつファイルシステムにおいてディレクトリを特定するために利用される文字列であり,ディレクトリの名前を"/"で区切って並べて表す。"/"で始まるパスを絶対パスという。絶対パスはルートディレクトリを起点として表したパスである。"/"で始まらないパスを相対パスという。相対パスは任意のノードを起点として表したパスである。
このプログラムが生成する木構造中の各ノードは,それぞれが一つのディレクトリを表し,ルートノードはルートディレクトリを表す。
図1に木構造の例を示す。図1中の楕(だ)円一つはノード一つに対応し," と " で囲まれた文字列はノードの名前を表す。ルートノードの名前は空文字列とする。例えば,ノード usr を特定する絶対パスは"/usr"であり,ノード usr を起点とする 相対パス"local/lib" が特定するノードは,絶対パス"/usr/local/lib"が 特定するノードと同じノード lib である。 クラス DirectoryNode は木構造を構成するノードを表すクラスであり,一つのインスタンスが一つのノードを表す。フィールド name はノードの名前を,フィールド parent は親ノードヘの参照を,フィールド children は子ノードのリストを保持する。引数を取らないコンストラクタはルートノードを生成する。
クラス DirectoryNode は次のメソッドをもつ。
- public DirectoryNode add(String path)
引数 path で与えられたパスが,このノードを起点に一つのノードを特定できるように木構造を拡張し,パスが特定するノードを返す。引数 path が空文字列又は絶対パスを表すなら,IllegalArgumentException を投げる。
パス中の連続する"/"は一つの"/"として扱い,未尾の"/"は無視する。つまり,パス"local//lib/"は"local/lib"とみなす。 - public String path()
このノードを特定する絶対パスを表す文字列(未尾は常に"/")を返す。
例えば,図1の最下段のノード lib でこのメソッドを呼ぶと,"/usr/local/lib/"を返す。 - public List
find(String name)
このノードが保持する各子ノードを頂点とする全ての部分木から,引数 name で 与えられた名前をもつノードを全て探し,見つかったノードをリストで返す。
広告
設問1
プログラム中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群
- ""
- "",null
- null
- null,""
b に関する解答群
- !path.startsWith("/") && !"".equals(path)
- !path.startsWith("/") || !””.equals(path)
- path.startsWith("/") && "".equals(path)
- path.startsWith("/") || "".equals(path)
c に関する解答群
- parent != ""
- parent != null
- parent == ""
- parent == null
d,e に関する解答群
- child
- name
- node
- null
- parent
- root
解答選択欄
- a:
- b:
- c:
- d:
- e:
- a=イ
- b=エ
- c=エ
- d=ウ
- e=イ
解説
この設問の解説はまだありません。設問2
クラス DirectoryNodeTester を実行したときに生成される,クラス DirectoryNode のインスタンスの個数として正しい答えを,解答群から選べ。
解答群
- 6
- 7
- 8
- 9
- 10
解答選択欄
- ウ
解説
この設問の解説はまだありません。設問3
次の記述中の に入れる正しい答えを,解答群の中から選べ。
クラス DirectoryNode のメソッド path が返す文字列の末尾は常に"/"である。これを,このメソッドが呼ばれたインスタンスがルートノードであるか,子ノードをもつときにだけ未尾が"/"になるように,メソッド path の最後のreturn文の直前に次の3行を挿入した。クラス DirectoryNodeTester の実行結果は図3となる。
クラス DirectoryNode のメソッド path が返す文字列の末尾は常に"/"である。これを,このメソッドが呼ばれたインスタンスがルートノードであるか,子ノードをもつときにだけ未尾が"/"になるように,メソッド path の最後のreturn文の直前に次の3行を挿入した。クラス DirectoryNodeTester の実行結果は図3となる。
f に関する解答群
- !children.isEmpty()
- children != null
- children == null
- children.isEmpty()
解答選択欄
- f:
- f=エ
解説
この設問の解説はまだありません。広告