第14回 新しいクラス(2)

      
 演習
 
<演習1>
Paperクラスを継承して、Noteクラスを作成する。
Noteクラスはページ数のメンバ変数 int page; を持つものとする。
空欄 /* ここを埋める */ を適切に埋めてプログラムを完成させなさい。
なお、ここには2個のメソッドが入る。

ソースファイル名は Ensyu1401.java とする。
 
class Note extends Paper
{
  private int page; // ページ数

  /* ここを埋める */

}
class Paper
{
  private String size; // サイズ、"A4","B5"など

  public void setSize( String s ){ // サイズを設定する
    size = new String(s);
  }
  public void show(){ // 表示
    System.out.println(" 用紙サイズ = " + size );
  }
}
class Ensyu1401
{
  public static void main(String[] args)
  {
    // ノートクラスのオブジェクト
    System.out.println("\n- ノート ----");
    Note nt = new Note();
    nt.setSize( "A4" );
    nt.setPage( 80 );
    nt.show();
  }
}

  
<実行結果>
Z:\java>java Ensyu1401

- ノート ----
 ページ数 = 80
 用紙サイズ = A4

Z:\java>
 
 
 
<演習2>
勇者のクラスBraveクラスと、それを継承して魔法使いのクラスWizardクラスを作成する。
/*(※1)*/と/*(※2)*/ を適切に埋めて、プログラムを完成させなさい。
なお、/*(※2)*/ はメソッドが1個入る。

ソースファイル名は Ensyu1404.java とする。
 
class Wizard extends Brave
{
  private int mp; // マジックポイント

  public Wizard( String n, int h, int m ){ // コンストラクタ
    /*(※1)*/
  }

  
/*(※2)*/
}
class Brave
{
  protected String name;
  private int hp;

  public Brave( String n, int h ){
    name = new String(n);
    hp = h;
  }
  public void attack(){ // 攻撃の表示
    int dmg = (int)(Math.random()*100);
    System.out.print(" 勇者" + name + "の攻撃 " + dmg + " のダメージ!");
    System.out.println(" (残りhp=" + (hp-dmg) + ")");
  }
}
class Ensyu1402
{
  public static void main(String[] args)
  {
    Brave [] ch = new Brave[5];

    ch[0] = new Brave( "ichiro", 157 );
    ch[1] = new Wizard( "jiro", 298, 120 );
    ch[2] = new Wizard( "saburo", 107, 100 );
    ch[3] = new Brave( "shiro", 353 );
    ch[4] = new Wizard( "goro", 216, 110 );

    for(int i=0;i<ch.length;i++) ch[i].attack();
  }
}

    
<実行例>
Z:\java>java Ensyu1402
 勇者ichiroの攻撃 91 のダメージ! (残りhp=66)
 魔法使いjiroは呪文を唱えた(残りmp=120)
 魔法使いsaburoは呪文を唱えた(残りmp=100)
 勇者shiroの攻撃 10 のダメージ! (残りhp=343)
 魔法使いgoroは呪文を唱えた(残りmp=110)

Z:\java>
     
 
<演習3>  この問題はちょっと難しいので、ここは飛ばして演習4をしてください(1/14 14:00)
第11回課題4のShogakuクラスとChugakuクラスのプログラムで、オブジェクトの表示方法を変更する。
以下は、第11回課題4の解答例において
  public static void main(String [] args) 
の表示処理の部分を青文字の箇所のように変更したものである。
Objectクラスの toString() メソッドを使って表示できるようにShogakuクラスとChugakuクラスを修正しなさい。

ソースファイル名は Ensyu1403.java とする。
    
class Chugaku extends Shogaku
{
  int shakai,eigo; // 得点(社会、英語)

  // 引数は 国語、算数、理科、社会、英語
  public Chugaku(int k, int sa, int r, int sh, int e){
    super(k,sa,r);
    shakai = sh;
    eigo = e;
    goukei = goukei + sh + e; // 3科目+2科目の合計
  }
  public void showTen2(){
    System.out.print(" " + shakai + " " + eigo);
  }
}
class Shogaku // 小学生クラス
{
  int kokugo,sansu,rika; // 得点(国語、算数、理科)
  int goukei;

  // 引数は 国語、算数、理科
  public Shogaku( int k, int sa, int r ){
    kokugo = k;
    sansu = sa;
    rika = r;
    goukei = k + sa + r; // 3科目の合計
  }
  public void showTen3(){
    System.out.print(" " + kokugo + " " + sansu + " " + rika);
  }
}
class Ensyu1403
{
  public static void main(String[] args)
  {
    // Shogakuクラスのオブジェクト
    System.out.println("\n- 小学生クラス ----");
    Shogaku sho = new Shogaku( 93, 78, 85 );
    //sho.showTen3();
    //System.out.println(" 合計 = " + sho.goukei );
    System.out.println( sho );

    // Chugakuクラスのオブジェクト
    System.out.println("\n- 中学生クラス ----");
    Chugaku chu = new Chugaku( 65, 95, 88, 94, 82 );
    //chu.showTen3();
    //chu.showTen2();
    //System.out.println("  合計 = " + chu.goukei );
    System.out.println( chu );
  }
}

  
<実行例>
Z:\java>java Ensyu1403

- 小学生クラス ----
 93 78 85 合計 = 256

- 中学生クラス ----
 65 95 88 94 82  合計 = 424

Z:\java>
  
  
   
<演習4>
以下は、普通電車(Trainクラス)と特急電車(LimitedExpressクラス)の料金を表示するプログラムである。
 普通電車の料金は 運賃
 特急電車の料金は 運賃+特急料金
で計算する。
/*(※1)*/〜/*(※4)*/ を適切に埋めてプログラムが動くようにしなさい。

ソースファイル名は Ensyu1404.java とする。
 
class LimitedExpress extends Train // 特急電車クラス
{
  int ex_charge; // 特急料金

  // コンストラクタ、引数)車名、運賃、特急料金
  public LimitedExpress( String n, int u, int ec ){
   
/*(※1)*/;
    ex_charge = ec;
  }
  public int getRyokin(){ // 運賃 + 特急料金を返す
    return /*(※2)*/;
  }
}
class Train // 普通電車クラス
{
  public String name; // 名前
  private int unchin; // 運賃

  // コンストラクタ、引数)車名、運賃
  public Train( String n, int u ){
   
/*(※3)*/;
    unchin = u;
  }
  public int getRyokin(){
// 運賃を返す
    return /*(※4)*/;
  }
}
class Ensyu1404
{
  public static void main(String[] args)
  {
    // Trainクラスのオブジェクト
    System.out.println("\n- Trainクラス ----");
    Train fu = new Train( "普通", 4750 );
    System.out.print( " " + fu.name + " " );
    System.out.println( fu.getRyokin() );

    // LimitedExpressクラスのオブジェクト
    System.out.println("\n- LimitedExpressクラス ----");
    LimitedExpress le = new LimitedExpress( "サンダーバード", 4750, 2900 );
    System.out.print( " " + le.name + " " );
    System.out.println( le.getRyokin() );
  }
}

  
<実行例>
Z:\java>java Ensyu1404

- Trainクラス ----
 普通 4750

- LimitedExpressクラス ----
 サンダーバード 7650

Z:\java>
  
  
 
<演習5>
以下は、Carクラス、RacingCarクラス、F1Carクラスを処理するプログラムである。
Carクラスを継承してRacingCarクラスを定義し、さらに
RacingCarクラスを継承してF1Carクラスを定義する。

 /*(※1)*//*(※4)*/ に適切な内容を埋めてプログラムが動くようにしなさい。

ソースファイル名は Ensyu1405.java とする。
  
class F1Car extends RacingCar // F1クラス
{
  public String team; // チーム名

  // コンストラクタ n:番号、g:ガソリン、c:コース数、t:チーム名
  public F1Car( int n, double g, int c, String t ){
   
/*(※1)*/;
    team = new String( t );
  }
  public void show(){
   
/*(※2)*/; // スーパークラスの表示を呼び出す
    System.out.println(" チーム = " + team);
  }
}
class RacingCar extends Car // RacingCarクラス
{
  public int course; // コース数

  // コンストラクタ n:番号、g:ガソリン、c:コース数
  public RacingCar( int n, double g, int c ){
   
/*(※3)*/;
    course = c;
  }
  public void show(){
   
/*(※4)*/; // スーパークラスの表示を呼び出す
    System.out.println(" コース = " + course);
  }
}
class Car // Carクラス
{
  public int num; // ナンバー
  public double gas; // ガソリン

  // コンストラクタ n:番号、g:ガソリン
  public Car( int n, double g ){
    num = n;
    gas = g;
  }
  public void show(){
    System.out.println(" ナンバー = " + num + " ガソリン = " + gas);
  }
}
class Ensyu1405
{
  public static void main(String[] args)
  {
    // Carクラスのオブジェクト
    System.out.println("\n- Carクラス ----");
    Car c = new Car( 1234, 55.0 );
    c.show();

    // RacingCarクラスのオブジェクト
    System.out.println("\n- RacingCarクラス ----");
    RacingCar rc = new RacingCar( 5678, 85.0, 8 );
    rc.show();

    // F1クラスのオブジェクト
    System.out.println("\n- F1クラス ----");
    F1Car f1 = new F1Car( 9999, 110.0, 15, "フェラーリ" );
    f1.show();
  }
}

   
<実行例>
Z:\java>java Ensyu1405

- Carクラス ----
 ナンバー = 1234 ガソリン = 55.0

- RacingCarクラス ----
 ナンバー = 5678 ガソリン = 85.0
 コース = 8

- F1クラス ----
 ナンバー = 9999 ガソリン = 110.0
 コース = 15
 チーム = フェラーリ

Z:\java>
  

    
演習問題の提出について
演習1演習5のプログラムソースの内容をTextファイルに記述して、Cerezo から提出しなさい。
上記の内容をすべて1個のTextファイルにまとめ、ファイル名は

   [自分の学籍番号]+"_演習14.txt"  
  (例:"5412016_演習14.txt"、"5412003_演習14.txt" など


のように保存してから提出すること。
提出物には学籍番号と氏名を必ず記載しておくこと。
 
<提出ファイルの作成例>
第14回演習問題の回答  5412099 福山太郎

- 演習1 -----------------------------------------
class Ensyu1401
{
  public static void main(String[] args) 
  {
      : 
  }
}

- 演習2 -----------------------------------------
class Ensyu1402
{
  public static void main(String[] args) 
  {
      : 
      :