Javaプログラミング基礎

様々なプログラム

問題2

例題で取り上げたジュークボックスの クラス JukeBox と、クラス Music を使って、 適当なメソッド main の内容を定義し、 様々な曲を次々と演奏する様子を表わすプログラムを書きなさい。 曲の情報は各自の普段良く聞いている曲の情報にすること。

メソッドmainのあるクラスをJukeBoxListenerとし、 ファイル名をJukeBoxListener.javaとすること。

class JukeBoxListener {
    public static void main(String[] args) {
	JukeBox myJukeBox = new JukeBox(3);

	myJukeBox.setMusic(0, "Kiss", "Prince and The Revolution");
	myJukeBox.setMusic(1, "Jump", "Van Halen");
	myJukeBox.setMusic(2, "S.O.S. (Rescue Me)", "Rihanna");

	myJukeBox.play(0);
	myJukeBox.play(1);
	myJukeBox.play(2);
    }
}

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());
    }
}

class Music {
    String name;
    String musician;

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

    String getName() {
        return name;
    }

    String getMusician() {
        return musician;
    }
}

問題3

円柱(cylinder)を表すクラスを定義しなさい。 クラス名は Cylinder とする。

円柱は、底面と側面からできている。 つまり、円柱と底面、円柱と側面の関係は、包含 (has-a) の関係である。 底面は円(circle)であり、側面は長方形(rectangle)である。 クラス Circle とクラス Rectangle を定義し、 これらを属性として持つようなクラス Cylinder を作成し、 円柱の体積を求めるメソッドと表面積を求めるメソッドを作成しなさい。

クラス Circle に面積と円周、 クラス Rectangle に面積を求めるメソッドを実装し、 クラス Cylinder で体積や表面積を求めるときにそれらを用いること。

なお、数値はすべて整数でよい。 円周率は3でよいが、Math.PI とするとπにもっとも近い double 値が得られる(参考)。

class CylinderProperties {
    public static void main(String[] args) {
	int radius = 5;
	int height = 10;
	Cylinder cylinder = new Cylinder(radius, height);
	System.out.println("円柱(半径=" + radius + ", 高さ=" + height + ")の");
	System.out.println(" 体積は" + cylinder.volume());
	System.out.println(" 表面積は" + cylinder.surfaceArea());
    }
}

class Cylinder {
    int height;
    Circle base;
    Rectangle side;

    Cylinder(int r, int h) {
	height = h;
	base = new Circle(r);
	side = new Rectangle(base.outline(), height);
    }
    int volume() {
	return base.area() * height;
    }
    int surfaceArea() {
	return base.area() * 2 + side.area();
    }
}

class Circle {
    int radius;

    Circle(int r) {
	radius = r;
    }
    int area() {
	return 3 * radius * radius;
    }
    int outline() {
	return 2 * 3 * radius;
    }
}

class Rectangle {
    int width;
    int height;
    Rectangle() {
	width = 1;
	height = 1;
    }
    Rectangle(int w, int h) {
	width = w;
	height = h;
    }
    int area() {
	return width * height;
    }
}

問題4

例題で定義したクラス Music の曲を再生することができる、 携帯音楽プレーヤのクラス MobileMusicPlayer を考える。 なお、今回作成する携帯音楽プレーヤには一曲だけ曲をダウンロードできるとする。

携帯音楽プレーヤ (class MobileMusicPlayer) は、 次のようなクラスであるとする。

class MobileMusicListener {
    public static void main(String[] args) {
        MobileMusicPlayer myIPod = new MobileMusicPlayer();
        Music song = new Music("Take On Me", "a-Ha");

        myIPod.download(song);
        myIPod.play();
    }
}

class MobileMusicPlayer {
    Music song;
    
    void download(Music s) {
	song = s;
	System.out.println(song.getName() + " (" + song.getMusician() +
			   ") がダウンロードされました");
    }

    void play() {
	System.out.println(song.getName() + " (" + song.getMusician() +
			   ") を演奏中");
    }
}

class Music {
    String name;
    String musician;

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

    String getName() {
	return name;
    }

    String getMusician() {
	return musician;
    }
}

問題5 (中級者向け: 余力のある人のみ行う課題)

前の問題と同様に Music クラスを利用し、 CDを表すクラス (class CD) を定義しなさい。 CD には複数の曲が含まれるので、 CD に含まれる曲は Music クラスの配列で表す。 曲番号 (トラック番号) は 0 から数えるものとする。

クラス CD には、少なくとも以下の属性、コンストラクタ、メソッドがあるものとする。

class CDListener {
    public static void main(String[] args) {

        CD cd = new CD("Pet Sounds", "The Beach Boys", 2);
        Music track0 = new Music("Wouldn't it be nice", "The Beach Boys");
        cd.setTrack(0, track0);
        Music track1 = new Music("God only knows", "The Beach Boys");
        cd.setTrack(1, track1);

	cd.showTracks();
    }
}

class CD {
    String title;
    String artist;
    Music[] tracks;

    CD(String t, String a, int no) {
	title = t;
	artist = a;
	tracks = new Music[no];
    }
    String getTitle() {
	return title;
    }
    String getArtist() {
	return artist;
    }
    void setTrack(int no, Music song) {
	tracks[no] = song;
    }
    Music getTrack(int no) {
	return tracks[no];
    }

    void showTracks() {
	for(int i = 0; i < tracks.length; i++) 
	    System.out.println(i + ": " + tracks[i].getName() + " (" +
			       tracks[i].getMusician() + ")");
    }
}

class Music {
    String name;
    String musician;

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

    String getName() {
	return name;
    }

    String getMusician() {
	return musician;
    }
}