エンジニア成長日記 swaponQ

コンピュータサイエンス専攻の一般人のブログです。

新・明解 Java 入門 演習 13-1 解答

Hello, Terminal!swaponQです!

今回から「第13章:抽象クラス」に入ります。

第13章には演習が3題用意されています。
理解優先で丁寧に解いていきます。

今回は演習 13-1 に取り組んでいこうと思います。

  • 演習 13-1

図形クラス群をテストするプログラムを作成せよ。List13-9と同じく、Shape型の配列を利用して、インスタンスの生成と表示を行うこと。
ただし、個々の要素が参照するインスタンスは、プログラム内で与えるのではなく、キーボードから読み込むようにすること。

冗長な記述を避けたいので、今回からテストプログラムとテスト結果のみを載せていこうと思います。(解答として十分だと判断しました)

・ShapeTester.java

import java.util.Scanner;

class ShapeTester {
  public static void main(String[]args){
    Scanner stdIn = new Scanner(System.in);

    System.out.print("図形は何個:");
    int num = stdIn.nextInt();
    Shape[] p = new Shape[num];

    for (int i = 0; i < num; i++) {
      System.out.print((i + 1) + "番の図形の種類 (1…点/2…水平直線/3…垂直直線/4…長方形):");
      int typeNum = stdIn.nextInt();
      if(typeNum == 1){
        p[i] = new Point();
      }
      if(typeNum == 2){
        System.out.print("長さ:");
        int length = stdIn.nextInt();
        p[i] = new HorzLine(length);
      }
      if(typeNum == 3){
        System.out.print("長さ:");
        int length = stdIn.nextInt();
        p[i] = new VertLine(length);
      }
      if(typeNum == 4){
        System.out.print("幅:");
        int width = stdIn.nextInt();
        System.out.print("高さ:");
        int height = stdIn.nextInt();
        p[i] = new Rectangle(width, height);
      }
    }
    for (Shape s : p) {
      s.print();
    }
  }
}


・実行結果

図形は何個:3
1番の図形の種類 (1…点/2…水平直線/3…垂直直線/4…長方形):1
2番の図形の種類 (1…点/2…水平直線/3…垂直直線/4…長方形):2
長さ:4
3番の図形の種類 (1…点/2…水平直線/3…垂直直線/4…長方形):4

幅:3
高さ:5
Point
+
HorizLine(length : 4)
----
Rectangle(width : 3 , height : 5)
***
***
***
***
***

今回は以上です。お疲れ様でした!

さて、次回は演習 13-2 です。

Goodbye, Terminal… swaponQでした!