エンジニア成長日記 swaponQ

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

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

Hello, Terminal!swaponQです!

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

  • 演習 13-2

図形クラス群に対して、直角二等辺三角形を表すクラス群を追加せよ。左下が直角のもの、右下が直角のもの、右上が直角のもの追加すること。直角二等辺三角形を表す抽象クラスを作り、そこから個々のクラスを派生して作ること。

・LTopRightTriangle.java

//左上直角二等辺三角形クラス
public class LTopRightTriangle extends RightTriangle {
  public LTopRightTriangle(int length) {
    super(length);
  }
  public String toString() {
    return "LTopRightTriangle(length:" + getLength() + ")";
  }
  public void draw(){
    for (int i = 0; i < getLength(); i++) {
      for (int j = (getLength() - i); j > 0; j--) {
        System.out.print('*');
      }
      System.out.println();
    }
  }
}

・RBottomRightTriangle.java

//右下直角二等辺三角形クラス
public class RBottomRightTriangle extends RightTriangle {
  public RBottomRightTriangle(int length) {
    super(length);
  }
  public String toString() {
    return "RBottomRightTriangle(length:" + getLength() + ")";
  }
  public void draw(){
    for (int i = getLength(); i > 0; i--) {
      for (int j = i; j - 1 > 0; j--) {
        System.out.print(' ');
      }
      for (int k = 0; k <= (getLength() - i); k++) {
        System.out.print('*');
      }
      System.out.println();
    }
  }
}

・RTopRightTriangle.java

//右上直角二等辺三角形クラス
public class RTopRightTriangle extends RightTriangle {
  public RTopRightTriangle(int length) {
    super(length);
  }
  public String toString() {
    return "RTopRightTriangle(length:" + getLength() + ")";
  }
  public void draw() {
    for (int i = getLength(); i > 0; i--) {
      for (int k = 0; k < getLength()-i; k++) {
        System.out.print(' ');
      }
      for (int j = i; j > 0; j--) {
        System.out.print('*');
      }
      System.out.println();
    }
  }
}

・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…右上直角二等辺三角形):");
      int typeNum = stdIn.nextInt();
      if (typeNum == 1) {
        System.out.print("一辺の長さ:");
        int length = stdIn.nextInt();
        p[i] = new LTopRightTriangle(length);
      }
      if (typeNum == 2) {
        System.out.print("一辺の長さ:");
        int length = stdIn.nextInt();
        p[i] = new RBottomRightTriangle(length);
      }
      if (typeNum == 3) {
        System.out.print("一辺の長さ:");
        int length = stdIn.nextInt();
        p[i] = new RTopRightTriangle(length);
      }
    }
    for (Shape s : p) {
      s.print();
    }
  }
}

・実行結果

図形は何個:3
1番の図形の種類 (1…左上直角二等辺三角形/2…右下直角二等辺三角形/3…右上直角二等辺三角形):1
一辺の長さ:4
2番の図形の種類 (1…左上直角二等辺三角形/2…右下直角二等辺三角形/3…右上直角二等辺三角形):2
一辺の長さ:4
3番の図形の種類 (1…左上直角二等辺三角形/2…右下直角二等辺三角形/3…右上直角二等辺三角形):3
一辺の長さ:4
LTopRightTriangle(length:4)
****
***
**
*

RBottomRightTriangle(length:4)
   *
  **
 ***
****
RTopRightTriangle(length:4)
****
 ***
  **
   *

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

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

Goodbye, Terminal… swaponQでした!