コンピュータ基礎および演習II

演習問題(中級・上級)

解答は earth.mlab.im.dendai.ac.jp/home/submit/1I-Computer2/[初級の出題日]/[学籍番号] のディレクトリに提出しなさい。 ソースファイル (〜.java) のみを提出すること。

ファイルの送信には ftp ソフトを用いる。 Linux の gFTP を使った提出方法 (実験室のマニュアル) を参照すること。

なお、中級・上級問題は楽しめる範囲で取り組めばよい。

問題1

コマンドライン引数を2つとり、1つ目の引数で与えられた文字列が、 2つ目の文字列の中に何回出現するかを数えて表示するプログラムを作成しなさい。 ファイル名は ArgsCounter.java とする。

実行例は以下のようになる。

$ java ArgsCounter please "please please me"
please please me の中に please は 2 回出現します。
$ 

String クラスの以下のメソッドを用いること。

public int indexOf(String str, int fromIndex)
この文字列内の fromIndex 文字目以降に、 指定された文字列 str が出現する最初の位置のインデックス(何文字目か)を返します。 文字列が見つからない場合は -1 を返します。

問題2

以前の演習問題で、1曲を表す Music クラスを定義した。 そのクラスに、指定された語が曲名に含まれるか調べるメソッド contains を実装しなさい。 ファイル名は MusicChecker.java とする。

main メソッドとそれに対応した実行例は以下のようになる。

class MusicChecker {
    public static void main(String[] args) {
	String query = args[0];
	Music[] songs = new Music[3];
        songs[0] = new Music("Penny Lane", "The Beatles");
        songs[1] = new Music("Strawberry Fields Forever", "The Beatles");
        songs[2] = new Music("Arnold Layne", "Pink Floyd");
	System.out.println("曲名に " + query + " を含む曲:");
	for(int i = 0; i < songs.length; i++) {
	    if(songs[i].contains(query))
		System.out.println(songs[i].getName() +
                           " by " + songs[i].getMusician());
	}
    }
}

// このクラス定義にメソッドを追加する
class Music {
    String name;
    String musician;
    Music(String musicName, String musicianName) {
        name = musicName;
        musician = musicianName;
    }
    String getName() {
        return name;
    }
    String getMusician() {
        return musician;
    }
}
$ java MusicChecker La
曲名に La を含む曲:
Penny Lane by The Beatles
Arnold Layne by Pink Floyd

問題3

以前の演習問題で、CD を再生する CDPlayer クラスを定義した。 これを改造することにより、 コマンドラインから keyword を指定して、 その語を曲名に含む曲だけ再生するプログラムを作成しなさい。 CDListener クラスをベースとするとよい。 ファイル名は CDTrackSearcher.java とする。

CDPlayer クラスに、指定された語を曲名に含む曲だけ再生するメソッド play(String keyword) を実装すること。

問題4

問題3 で作成したプログラムを改造し、 keyword がいくつあっても検索し再生できるようにすること。 例えば、word1、word2 が指定された場合は、 その 2単語を曲名に含む曲だけ再生される (AND検索)。 配列を引数にとる play メソッドを実装するとよい。 ファイル名は CDTrackSearcher2.java とする。