解答は
- ホスト: earth.mlab.im.dendai.ac.jp
- ディレクトリ: /home/submit/JavaLib/[今日の日付]/[学籍番号]
に提出しなさい。クラスファイル (〜.class) は提出不要。 提出は gFTP 等の ftp ソフトを用いて行うこと。
ArrayList の要素を線形探索するプログラムを作成しなさい。 ArrayList の要素は Music クラスのオブジェクトとし、 曲名をキーとして探索するものとする。
同一の曲名を持つ Music オブジェクトが複数存在する場合には、 先頭の 1 つが見つかればよいものとする。
main メソッドのあるクラスのクラス名は SequentialSearch とする。
import java.util.*; class SequentialSearch { public static void main(String[] args) { ArrayList<Music> songs = new ArrayList<Music>(); songs.add(new Music("Life Begins At The Hop", "XTC", 235)); songs.add(new Music("Burning With Optimism's Flame", "XTC", 264)); songs.add(new Music("Love At First Sight", "XTC", 190)); songs.add(new Music("Respectable Street", "XTC", 231)); songs.add(new Music("No Language In Our Lungs", "XTC", 299)); songs.add(new Music("This Is Pop", "XTC", 169)); songs.add(new Music("Scissors Man", "XTC", 289)); songs.add(new Music("Towers Of London", "XTC", 323)); songs.add(new Music("Battery Brides", "XTC", 438)); songs.add(new Music("Living Through Another Cuba", "XTC", 209)); songs.add(new Music("Generals And Majors", "XTC", 268)); songs.add(new Music("Making Plans For Nigel", "XTC", 269)); songs.add(new Music("Are You Receiving Me?", "XTC", 198)); // 全曲表示 for(Music music: songs) System.out.println(music); System.out.println(); // 曲名をキー入力 System.out.print("Song name:"); Scanner stdIn = new Scanner(System.in); String songName = stdIn.nextLine(); // 線形探索 Music song = sequentialSearch(songs, songName); // 結果表示 if (song == null) System.out.println("Not Found: " + songName); else System.out.println("Found: " + song.getTitle() + " by " + song.getArtist() + "."); } // 線形探索 (戻り値: 見つかったらそのオブジェクト、見つからなかったら null) static Music sequentialSearch(ArrayList<Music> list, String songName) { // ここを考える } } class Music { private String title; private String artist; private int time; // [秒] public Music(String title, String artist, int time) { this.title = title; this.artist = artist; this.time = time; } public String getTitle() { return title; } public String getArtist() { return artist; } public int getTime() { return time; } public String toString() { return title + " by " + artist + " (Time: " + time + " sec)"; } }
問題1のプログラムをもとに、 同一の曲名を持つ Music オブジェクトが複数存在する場合には、 そのすべてを見つけるように変更しなさい。 メソッド sequentialSearch の戻り値を変更すること。
main メソッドのあるクラスのクラス名は SequentialSearchAll とする。
ArrayList の要素を2分探索するプログラムを作成しなさい。 ArrayList の要素は Music クラスのオブジェクトとし、 曲名をキーとして探索するものとする。
2分探索を行う時点で、リストは曲名の辞書順でソートされているものとする。
同一の曲名を持つ Music オブジェクトが複数存在する場合には、 そのいずれか 1 つが見つかればよいものとする。
main メソッドのあるクラスのクラス名は BinarySearch とする。
import java.util.*; class BinarySearch { public static void main(String[] args) { ArrayList<Music> songs = new ArrayList<Music>(); songs.add(new Music("Life Begins At The Hop", "XTC", 235)); songs.add(new Music("Burning With Optimism's Flame", "XTC", 264)); songs.add(new Music("Love At First Sight", "XTC", 190)); songs.add(new Music("Respectable Street", "XTC", 231)); songs.add(new Music("No Language In Our Lungs", "XTC", 299)); songs.add(new Music("This Is Pop", "XTC", 169)); songs.add(new Music("Scissors Man", "XTC", 289)); songs.add(new Music("Towers Of London", "XTC", 323)); songs.add(new Music("Battery Brides", "XTC", 438)); songs.add(new Music("Living Through Another Cuba", "XTC", 209)); songs.add(new Music("Generals And Majors", "XTC", 268)); songs.add(new Music("Making Plans For Nigel", "XTC", 269)); songs.add(new Music("Are You Receiving Me?", "XTC", 198)); // ソート Collections.sort(songs); // 全曲表示 for(Music music: songs) System.out.println(music); System.out.println(); // 曲名をキー入力 System.out.print("Song name:"); Scanner stdIn = new Scanner(System.in); String songName = stdIn.nextLine(); // 2分探索 Music song = binarySearch(songs, songName); // 結果表示 if (song == null) System.out.println("Not Found: " + songName); else System.out.println("Found: " + song.getTitle() + " by " + song.getArtist() + "."); } // 2分探索 (戻り値: 見つかったらそのオブジェクト、見つからなかったら null) static Music binarySearch(ArrayList<Music> list, String songName) { // ここを考える } } class Music implements Comparable<Music> { private String title; private String artist; private int time; // [秒] public Music(String title, String artist, int time) { this.title = title; this.artist = artist; this.time = time; } public String getTitle() { return title; } public String getArtist() { return artist; } public int getTime() { return time; } public int compareTo(Music another) { // titleの辞書順 return title.compareTo(another.getTitle()); } public String toString() { return title + " by " + artist + " (Time: " + time + " sec)"; } }