Javaプログラミング基礎

演習問題 (中級〜上級)

解答は

に提出しなさい。ソースファイル (〜.java) のみを提出。 提出は gFTP 等の ftp ソフトを用いて行う。

問題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

問題2-1

コマンドライン引数から与えられた複数の文字列(任意の個数に対応できること) の中から、 辞書順で最も先頭に来るべき文字列を探し表示するプログラムを書きなさい。

$ java SearchFirstString golf tennis riding volleyball
golf

問題2-2

コマンドライン引数から与えられた複数の文字列(任意の個数に対応できること) を、 辞書順に並び替えて表示するプログラムを書きなさい。

$ java SortString golf tennis riding volleyball
golf riding tennis volleyball

問題3

問題3-1

以前の演習問題で、曲の番号を指定して演奏する JukeBox クラスを実装した。 この JukeBox に、曲の番号を指定するのではなく、 曲名の一部を指定することにより演奏するような検索機能を実装しなさい。 ファイル名は MusicSearcher.java とする。

まず、以前の Music クラスに、 指定された語が曲名に含まれるか調べるメソッド contains(String word) を実装しなさい。 それを JukeBox クラスで利用することにより、 指定した曲の演奏機能を実現しなさい。 JukeBox クラスにはメソッド play(String word) を実装しなさい。

$ java MusicSearcher La
Now playing: Penny Lane by The Beatles
Now playing: Arnold Layne by Pink Floyd
$ 

問題3-2

曲名検索をする際に、複数の語を指定できるようにしなさい。 例えば、word1、word2 が指定された場合は、 その 2単語を曲名に含む曲だけが再生される (AND検索)。 配列を引数にとる play メソッドを実装するとよい。

$ java MusicSearcher La old
Now playing: Arnold Layne by Pink Floyd
$ 
class MusicSearcher {
    public static void main(String[] args) {
	JukeBox myJukeBox = new JukeBox(5);

	myJukeBox.setMusic(0, "Kiss", "Prince and The Revolution");
	myJukeBox.setMusic(1, "Jump", "Van Halen");
	myJukeBox.setMusic(2, "S.O.S. (Rescue Me)", "Rihanna");
	myJukeBox.setMusic(3, "Penny Lane", "The Beatles");
	myJukeBox.setMusic(4, "Arnold Layne", "Pink Floyd");

	// args[0] を曲名に含んでいる曲を演奏
	myJukeBox.play(args[0]);
	// args に格納されているすべての語を曲名に含んでいる曲だけを演奏
	myJukeBox.play(args);
    }
}

class JukeBox {
    Music[] songs;

    JukeBox() {
	songs = new Music[10];
    }

    JukeBox(int numberOfSong) {
	songs = new Music[numberOfSong];
    }

    void setMusic(int no, String title, String artist) {
        songs[no] = new Music(title, artist);
    }

    void play(int no) {
        System.out.println("Now playing: " + songs[no].getName() + " by " +
			   songs[no].getMusician());
    }

    // メソッド play(String word) を追加 (問題3-1)

    // メソッド play(String[] words) を追加 (問題3-2)
}

class Music {
    String name;
    String musician;

    Music(String n, String m) {
        name = n;
        musician = m;
    }

    String getName() {
        return name;
    }

    String getMusician() {
        return musician;
    }

    // メソッド contains を追加
}