Backend/JAVA

[JAVA] 특강 18일차 : 코딩 훈련! 문제 풀이 (② 상속)

JOKUN 2022. 7. 13. 20:51

 

 

 

Point

220713문제(1).pdf
0.16MB

📑문제

원, 사각형 정보 프로그램

 

 

 

🔍풀이

Run

package com.kh.practice.point.run;

import com.kh.practice.point.model.vo.Point;
import com.kh.practice.point.view.PointMenu;

public class Run {
    public static void main(String[] args) {
        new PointMenu().mainMenu();
    }
}

 

 

Point

package com.kh.practice.point.model.vo;

public class Point {
    private int x;
    private int y;

    public Point() {
    }

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }


    /**
     * 필드에 담긴 데이터를 반환하는 메소드
     * @return
     */
    @Override
    public String toString(){
        return x + ", " + y;
    }
}

 

 

Circle

package com.kh.practice.point.model.vo;

public class Circle extends Point{
    private int radius;

    public Circle(){
    }

    public Circle(int x, int y, int radius) {
        setX(x);
        setY(y);
        this.radius = radius;
    }

    public int getRadius() {
        return radius;
    }

    public void setRadius(int radius) {
        this.radius = radius;
    }

    @Override
    public String toString(){
        return super.toString()+ ", " + radius;
    }
}

 

 

Rectangle

package com.kh.practice.point.model.vo;

public class Rectangle extends Point{
    private int width;
    private int height;

    public Rectangle(){
    }

    public Rectangle(int x, int y, int width, int height) {
        setX(x);
        setY(y);
        this.width = width;
        this.height = height;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    @Override
    public String toString(){
       return super.toString() + " " + height + " " + width;
    }
}

 

 

PointMenu

package com.kh.practice.point.view;

import com.kh.practice.point.controller.CircleController;
import com.kh.practice.point.controller.RectangleController;

import java.util.Scanner;

public class PointMenu {
    private Scanner sc;
    private CircleController cc;
    private RectangleController rc;

    public PointMenu(){
        sc = new Scanner(System.in);
        cc = new CircleController();
        rc = new RectangleController();
    }

    /**
     * 메인메뉴 출력, 잘못 입력했을 시 다시 받도록 반복
     */
    public void mainMenu(){
        while (true){
            System.out.println("==== 메뉴 ====");
            System.out.println("1. 원");
            System.out.println("2. 사각형");
            System.out.println("9. 끝내기");
            System.out.print("메뉴 번호 : ");
            int menuNum = sc.nextInt();
            switch (menuNum){
                case 1:
                    circleMenu();
                    break;
                case 2:
                    rectangleMenu();
                    break;
                case 9:
                    System.out.println("프로그램이 종료되었습니다.");
                    return;
                default:
                    System.out.println("잘못된 번호를 입력하였습니다.");
                    return;
            }

        }
    }


    /**
     * 원 메뉴 출력, 잘못 입력했을 시 메인메뉴로 돌아감
     */
    public void circleMenu(){
        while (true){
            System.out.println("==== 원 메뉴 ====");
            System.out.println("1. 원 둘레");
            System.out.println("2. 원 넓이");
            System.out.println("9. 메인으로");
            System.out.print("메뉴 번호 : ");
            int menuNum = sc.nextInt();
            switch (menuNum){
                case 1:
                    calcCircum();
                    break;
                case 2:
                    calcCircleArea();
                    break;
                case 9:
                    System.out.println("메인으로 돌아갑니다");
                    return;
                default:
                    System.out.println("잘못된 번호를 입력하였습니다.");
                    return;
            }
        }
    }


    /**
     * 사각형 메뉴 출력, 잘못 입력했을 시 메인메뉴로 돌아감
     */
    public void rectangleMenu(){
        while (true){
            System.out.println("==== 사각형 메뉴 ====");
            System.out.println("1. 사각형 둘레");
            System.out.println("2. 사각형 넓이");
            System.out.println("9. 메인으로");
            System.out.print("메뉴 번호 : ");
            int menuNum = sc.nextInt();
            switch (menuNum){
                case 1:
                    calcPerimeter();
                    break;
                case 2:
                    calcRectArea();
                    break;
                case 9:
                    System.out.println("메인으로 돌아갑니다");
                    return;
                default:
                    System.out.println("잘못된 번호를 입력하였습니다.");
                    return;
            }
        }
    }


    /**
     * X, y 좌표와 반지름을 받아 원의 정보와 원 둘레 출력
     */
    public void calcCircum(){
        System.out.print("x 좌표 : ");
        int x = sc.nextInt();
        System.out.print("y 좌표 : ");
        int y = sc.nextInt();
        System.out.print("반지름 : ");
        int radius = sc.nextInt();

        String calcCircum = cc.calcCircum(x, y, radius);
        System.out.println(calcCircum);
    }


    /**
     * X, y 좌표와 반지름을 받아 원의 정보와 원 넓이 출력
     */
    public void calcCircleArea(){
        System.out.print("x 좌표 : ");
        int x = sc.nextInt();
        System.out.print("y 좌표 : ");
        int y = sc.nextInt();
        System.out.print("반지름 : ");
        int radius = sc.nextInt();

        String calcArea = cc.calcArea(x, y, radius);
        System.out.println(calcArea);
    }

    /**
     * X, y 좌표와 높이, 너비를 받아 사각형의 정보와 사각형 둘레 출력
     */
    public void calcPerimeter(){
        System.out.print("x 좌표 : ");
        int x = sc.nextInt();
        System.out.print("y 좌표 : ");
        int y = sc.nextInt();
        System.out.print("높이 : ");
        int height = sc.nextInt();
        System.out.print("너비 : ");
        int width = sc.nextInt();

        String calcPerimeter = rc.calcPerimeter(x, y, height, width);
        System.out.println(calcPerimeter);
    }

    /**
     * X, y 좌표와 높이, 너비를 받아 사각형의 정보와 사각형 넓이 출력
     */
    public void calcRectArea(){
        System.out.print("x 좌표 : ");
        int x = sc.nextInt();
        System.out.print("y 좌표 : ");
        int y = sc.nextInt();
        System.out.print("높이 : ");
        int height = sc.nextInt();
        System.out.print("너비 : ");
        int width = sc.nextInt();

        String calcArea = rc.calcArea(x, y, height, width);
        System.out.println(calcArea);
    }
}

 

 

RectangleController

package com.kh.practice.point.controller;

import com.kh.practice.point.model.vo.Rectangle;

public class RectangleController {
    private Rectangle r;

    /**
     * 받은 매개변수를 이용하여 필드들을 초기
     * 화하고 초기화한 정보와 면적 반환
     * 면적 : 너비 * 높이
     * @param x
     * @param y
     * @param height
     * @param width
     * @return
     */
    public String calcArea(int x, int y, int height, int width){
        r = new Rectangle(x, y, width, height);
        return r.toString() + " / " + r.getHeight() * r.getWidth();
    }


    /**
     * 받은 매개변수를 이용하여 필드들을 초기
     * 화하고 초기화한 정보와 둘레 반환
     * 둘레 : 2 * (너비 + 높이)
     * @param x
     * @param y
     * @param height
     * @param width
     * @return
     */
    public String calcPerimeter(int x, int y, int height, int width){
        r = new Rectangle(x, y, width, height);
        return r.toString() + " / " + (r.getHeight() + r.getWidth()) * 2;
    }
}

 

 

CircleController

package com.kh.practice.point.controller;

import com.kh.practice.point.model.vo.Circle;

public class CircleController {
    private Circle c;

    /**
     * 받은 매개변수를 이용하여 필드들을 초기
     * 화하고 초기화한 정보와 면적 반환
     * 면적 : PI * 반지름 * 반지름
     * @param x
     * @param y
     * @param radius
     * @return
     */
    public String calcArea(int x, int y, int radius){
        c = new Circle(x, y, radius);
        return c.toString() + " / " + Math.PI * c.getRadius() * c.getRadius();
    }


    /**
     * 받은 매개변수를 이용하여 필드들을 초기
     * 화하고 초기화한 정보와 둘레 반환
     * 둘레 : PI * 반지름 * 2
     * @param x
     * @param y
     * @param radius
     * @return
     */
    public String calcCircum(int x, int y, int radius){
        c = new Circle(x, y, radius);
        return c.toString() + " / " + Math.PI * c.getRadius() * 2;
    }
}

 

 

 

자바 상속 객체 두 번째 문제 person클래스는 내일 이어서 마무리 할 예정! 😎