Backend/JAVA
[JAVA] 특강 18일차 : 코딩 훈련! 문제 풀이 (② 상속)
JOKUN
2022. 7. 13. 20:51
Point
📑문제
원, 사각형 정보 프로그램
🔍풀이
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클래스는 내일 이어서 마무리 할 예정! 😎