スーパークラス、サブクラスを作成し、各操作をするプログラム 車の積載量 乗客数

スーパークラス、サブクラスを作成し、各操作をするプログラム 車の積載量 乗客数

練習問題6

車を表すスーパークラスCar、トラックを表すサブクラスTruck、バスを表すサブクラスBusを作成し、各操作ができるプログラムを作成する。

 

実行画面

操作を入力して下さい

全車情報表示(1), トラックに荷物を積む(2), トラックから荷物を下ろす(3),
バスに乗客を乗せる(4), バスから乗客を降ろす(5), 終了(他)>1【enterキー】
車の種類:トラック
色:青
最大積載量:2.0[t]
現在積載量:0.0[t]
車の種類:バス
色:緑
乗車定員:30[人]
現在乗客数:0[人]

 

操作を入力して下さい
全車情報表示(1), トラックに荷物を積む(2), トラックから荷物を下ろす(3),
バスに乗客を乗せる(4), バスから乗客を降ろす(5), 終了(他)>2【enterキー】
荷物の重さ[t]を入力して下さい > 1.5【enterキー】
1.5[t]積み込みました。

 

操作を入力して下さい
全車情報表示(1), トラックに荷物を積む(2), トラックから荷物を下ろす(3),
バスに乗客を乗せる(4), バスから乗客を降ろす(5), 終了(他)>4【enterキー】
人数[人]を入力して下さい > 20【enterキー】
20[人]乗せました。

 

操作を入力して下さい
全車情報表示(1), トラックに荷物を積む(2), トラックから荷物を下ろす(3),
バスに乗客を乗せる(4), バスから乗客を降ろす(5), 終了(他)>3【enterキー】
荷物の重さ[t]を入力して下さい > 2【enterキー】
積み下ろせません。

 

操作を入力して下さい
全車情報表示(1), トラックに荷物を積む(2), トラックから荷物を下ろす(3),

 

バスに乗客を乗せる(4), バスから乗客を降ろす(5), 終了(他)>5
人数[人]を入力して下さい > 15
15[人]降ろしました。

 

操作を入力して下さい
全車情報表示(1), トラックに荷物を積む(2), トラックから荷物を下ろす(3),
バスに乗客を乗せる(4), バスから乗客を降ろす(5), 終了(他)>1【enterキー】
車の種類:トラック
色:青
最大積載量:2.0[t]
現在積載量:1.5[t]
車の種類:バス
色:緑
乗車定員:30[人]
現在乗客数:5[人]

 

操作を入力して下さい
全車情報表示(1), トラックに荷物を積む(2), トラックから荷物を下ろす(3),
バスに乗客を乗せる(4), バスから乗客を降ろす(5), 終了(他)>0【enterキー】

 

 

クラス:Car
メンバ変数:

  • private String color 車の色

    コンストラクタ:

  • public Car(String color) 車の色を設定する

    メンバメソッド:

  • public void display() 機能:車の色を表示する

     

    クラス:Truck (extends Car)
    メンバ変数:

  • private final double MAXLOAD 最大積載量[t]
  • private double tempLoad 現在積載量[t]

    コンストラクタ:

  • public Truck(String color, double maxLoad) 色と最大積載量を設定する

    メンバメソッド:

  • public void add(double load) 機能:load[t]の荷物を積み込む

    最大積載量を超える場合「積み込めません。」と表示する

  • public void reduce(double load) 機能:load[t]の荷物を積み下ろす

    積載量が負になる場合「積み下ろせません。」と表示する

  • public void display() 機能:車の種類(トラック)、色、最大積載量、現在積載量を表示する

     

    クラス:Bus (extends Car)
    メンバ変数:

  • private final int MAXPASSENGER 乗車定員[人]
  • private int tempPassenger 現在乗客数[人]

    コンストラクタ:

  • public Bus(String color, int maxPassenger) 色と乗車定員を設定する

    メンバメソッド:

  • public void carry(int passenger) 機能:passenger[人]の乗客を乗せる

    乗車定員を超える場合「乗せられません。」と表示する

  • public void drop(int passenger) 機能:passenger[人]の乗客を降ろす

    乗客数が負になる場合「降ろせません。」と表示する

  • public void display() 機能:車の種類(バス)、色、乗車定員、    現在乗客数を表示する

     

    クラス:ren13_6.java(メインのクラス)
     まず、要素数が2のCarクラスの配列を作成し、トラックとバスのインスタンス1個ずつを 扱う。トラックの色は"青"、最大積載量は2.0[t]、バスの色は"緑"、乗車定員は30[人]としてイ
    ンスタンスを生成する。Carクラスの参照型変数を用いているため、必要に応じてキャスト(型
    変換)を行う。

     

  • 解答例

    class Car {

    private String color;

     

    public Car(String color) {
    this.color = color;
    }

     

    public void display() {
    System.out.println("色:" + color);
    }
    }

    class Bus extends Car {

     

    private final int MAXPASSENGER;
    private int tempPassenger;

     

    public Bus(String color, int maxPassenger) {
    super(color);
    this.MAXPASSENGER = maxPassenger;
    this.tempPassenger = 0;
    }

     

    public void carry(int passenger) {
    if(tempPassenger + passenger <= MAXPASSENGER) {
    tempPassenger += passenger;
    System.out.println(passenger + "[人]乗せました。");
    }
    else {
    System.out.println("乗せられません。");
    }
    }

     

    public void drop(int passenger) {
    if(tempPassenger - passenger >= 0) {
    tempPassenger -= passenger;
    System.out.println(passenger + "[人]降ろしました。");
    }
    else {
    System.out.println("降ろせません。");
    }
    }

     

    public void display() {
    System.out.println("車の種類:バス");
    super.display();
    System.out.println("乗車定員:" + MAXPASSENGER + "[人]");
    System.out.println("現在乗客数:" + tempPassenger + "[人]");
    }

     

    }

    class Truck extends Car {

     

    private final double MAXLOAD;
    private double tempLoad;

     

    public Truck(String color, double maxLoad) {
    super(color);
    this.MAXLOAD = maxLoad;
    this.tempLoad = 0;
    }

     

    public void add(double load) {
    if(tempLoad + load <= MAXLOAD) {
    tempLoad += load;
    System.out.println(load + "[t]積み込みました。");
    }
    else {
    System.out.println("積み込めません。");
    }
    }

     

    public void reduce(double load) {
    if(tempLoad - load >= 0) {
    tempLoad -= load;
    System.out.println(load + "[t]積み下ろしました。");
    }
    else {
    System.out.println("積み下ろせません。");
    }
    }

     

    public void display() {
    System.out.println("車の種類:トラック");
    super.display();
    System.out.println("最大積載量:" + MAXLOAD + "[t]");
    System.out.println("現在積載量:" + tempLoad + "[t]");
    }

     

    }

    import java.io.*;

     

    public class ren13_6 {

     

    public static void main(String[] args) throws IOException {
    BufferedReader br
    = new BufferedReader( new InputStreamReader(System.in) );

     

    Car car[] = new Car[2];
    car[0] = new Truck("青", 2.0);
    car[1] = new Bus("緑", 30);

     

    System.out.println("操作を入力して下さい");
    System.out.println("全車情報表示(1), トラックに荷物を積む(2), トラックから荷物を下ろす(3), ");
    System.out.print("バスに乗客を乗せる(4), バスから乗客を降ろす(5), 終了(他)>");
    int n = Integer.parseInt(br.readLine());
    double load;
    int passenger;
    while( 1 <= n && n <= 5) {
    switch( n ) {
    case 1:
    for(int i=0; i<2; i++) {
    car[i].display();
    }
    break;
    case 2:
    System.out.print("荷物の重さ[t]を入力して下さい > ");
    load = Double.parseDouble(br.readLine());

    ((Truck)car[0]).add(load);
    break;
    case 3:
    System.out.print("荷物の重さ[t]を入力して下さい > ");
    load = Double.parseDouble(br.readLine());
    ((Truck)car[0]).reduce(load);
    break;
    case 4:
    System.out.print("人数[人]を入力して下さい > ");
    passenger = Integer.parseInt(br.readLine());
    ((Bus)car[1]).carry(passenger);
    break;
    case 5:
    System.out.print("人数[人]を入力して下さい > ");
    passenger = Integer.parseInt(br.readLine());
    ((Bus)car[1]).drop(passenger);

    break;
    }
    System.out.println();
    System.out.println("操作を入力して下さい");
    System.out.println("全車情報表示(1), トラックに荷物を積む(2), トラックから荷物を下ろす(3), ");
    System.out.print("バスに乗客を乗せる(4), バスから乗客を降ろす(5), 終了(他)>");
    n = Integer.parseInt(br.readLine());
    }
    }

     

    }