Javaの学習を始めて30日くらいの人のための問題集

Java

オブジェクト指向、抽象クラスの問題。

Q1
以下のようなクラスを作成し、処理を実現する。

■クラス:OfficeWorker(抽象クラス)

<フィールド>
・名前

<コンストラクタ>
・任意

<メソッド>
public void introduce(){自己紹介をする}
public abstract void work();//抽象メソッド

■クラス:OrdinaryOfficeWorker(スーパークラス:OfficeWorker)

<メソッド>(抽象メソッドの実装)
public void work(){普通のオフィスワーカーの働きぶりを書く}
■クラス:EliteOfficeWorker(スーパークラス:OfficeWorker)

<メソッド>(抽象メソッドの実装)
public void work(){エリートオフィスワーカーの働きぶりを書く}
■クラス:LazyOfficeWorker(スーパークラス:OfficeWorker)

<メソッド>(抽象メソッドの実装)
public void work(){怠惰なオフィスワーカーの働きぶりを書く}

■アプリケーションクラス
3人のオフィスワーカーインスタンスを作成し、処理を実現する。この際、3人の実クラスは3つのクラスからランダムに選ぶこと。(3人ともLazyになったりする可能性がある)

[実行例]

あなたの部下に3人配属されました
1人目の名前を入力してください>John
はじめまして。私はJohnです。
2人目の名前を入力してください>Paul
はじめまして。私はPaulです。
3人目の名前を入力してください>George
はじめまして。私はGeorgeです。
誰の働きぶりを見にいきますか?
0・・・John
1・・・Paul
2・・・George
3・・・終了
番号を入力してください>0
Johnは仕事がはやい!しかも正確だ。
誰の働きぶりを見にいきますか?
0・・・John
1・・・Paul
2・・・George
3・・・終了
番号を入力してください>1
Paulは9時から5時まで働いている。遅刻や欠勤はない
誰の働きぶりを見にいきますか?
0・・・John
1・・・Paul
2・・・George
3・・・終了
番号を入力してください>2
GeorgeはPCの画面を即座に切り替えた。何をしていたのだろう。
誰の働きぶりを見にいきますか?
0・・・John
1・・・Paul
2・・・George
3・・・終了
番号を入力してください>3
アプリケーションを終了します。

一般クラス

public abstract class OfficeWorker{
	String name;
	public OfficeWorker(String name){
		this.name=name;
	}
	public void introduce(){
		System.out.println("はじめまして。私は"+this.name+"です。");
	}
	public abstract void work();
}
class OrdinaryOfficeWorker extends OfficeWorker{
	public OrdinaryOfficeWorker(String name){
		super(name);
	}
	@Override
	public void work(){
		System.out.printf("%sは9時から5時まで働いている。遅刻や欠勤はない%n",this.name);
	}
}
class EliteOfficeWorker extends OfficeWorker{
	public EliteOfficeWorker(String name){
		super(name);
	}
	@Override
	public void work(){
		System.out.printf("%sは仕事がはやい!しかも正確だ。%n",this.name);
	}
}
class LazyOfficeWorker extends OfficeWorker{
	public LazyOfficeWorker(String name){
		super(name);
	}
	@Override
	public void work(){
		System.out.printf("%sはPCの画面を即座に切り替えた。何をしていたのだろう。%n",this.name);
	}
}

アプリケーションクラス

import java.util.*;
public class WorkerApp{
	public static void main(String[] args){
		Scanner sc =new Scanner(System.in);
		System.out.println("あなたの部下に3人配属されました。");
		OfficeWorker[] workers=new OfficeWorker[3];
		Random rand=new Random();
		for(int i=0;i<workers.length;i++){
			System.out.printf("%d人目の名前を入力>>",i+1);
			String name=sc.next();
			int rnd=rand.nextInt(3);
			switch(rnd){
				case 0:
					workers[i]=new OrdinaryOfficeWorker(name);
					break;
				case 1:
					workers[i]=new EliteOfficeWorker(name);
					break;
				case 2:
					workers[i]=new LazyOfficeWorker(name);
					break;
			}
			workers[i].introduce();
		}
		while(true){
			System.out.println("誰の働きぶりを見に行きますか?");
			for(int i=0;i<=workers.length;i++){
				System.out.printf("%d...",i);
				if(i==workers.length){
					System.out.println("終了");
				}else{
					System.out.println(workers[i].name);
				}
			}
			System.out.print("番号を入力>>");
			int idx=sc.nextInt();
			if(idx>=workers.length){
				System.out.println("アプリケーションを終了します.");
				sc.close();
				return;
			}
			workers[idx].work();
		}


	}

}

コメント

タイトルとURLをコピーしました