객체지향에서 배운 개념과 문법을 이용해서 다음 요구조건을 만족하는 클래스를 작성하시요. 여러분이 게임을 만든다고 생각해보세요.
요구사항
- 사람은 자식, 부모님, 조부모님이 있다.
- 모든 사람은 이름, 나이, 현재 장소정보(x,y좌표)가 있다.
- 모든 사람은 걸을 수 있다. 장소(x, y좌표)로 이동한다.
- 자식과 부모님은 뛸 수 있다. 장소(x, y좌표)로 이동한다.
- 조부모님의 기본속도는 1이다. 부모의 기본속도는 3, 자식의 기본속도는 5이다.
- 뛸때는 속도가 기본속도대비 +2 빠르다.
- 수영할때는 속도가 기본속도대비 +1 빠르다.
- 자식만 수영을 할 수 있다. 장소(x, y좌표)로 이동한다.
위 요구사항을 만족하는 클래스들을 바탕으로, Main 함수를 다음 동작을 출력(System.out.println)하며 실행하도록 작성하시오. 이동하는 동작은 각자 순서가 맞아야 합니다.
- 모든 종류의 사람의 인스턴스는 1개씩 생성한다.
- 모든 사람의 처음 위치는 x,y 좌표가 (0,0)이다.
- 모든 사람의 이름, 나이, 속도, 현재위치를 확인한다.
- 걸을 수 있는 모든 사람이 (1, 1) 위치로 걷는다.
- 뛸 수 있는 모든 사람은 (2,2) 위치로 뛰어간다.
- 수영할 수 있는 모든 사람은 (3, -1)위치로 수영해서 간다.
풀면서 힘들었던 점
> this() 문법에 약했음
> 문제를 구조화하는 것에 약했음
> interface활용력이 약했음
내가 구조화한 방식 / 답안 구조화 방식
public class Human {
String name;
int age;
int speed;
int x,y;
//초기화를 위한 컨스트럭터
public Human(String name, int age, int speed, int x, int y) {
this.name = name;
this.age = age;
this.speed = speed;
this.x = x;
this.y = y;
}
// x,y 초기값은 0,0 이라고 조건이 제시되었음
// x,y값 입력을 굳이 안하고 싶어할 수도 있으니 컨스트럭터를 만들어서
// name age speed만받으며 위에있는 컨스트럭터를 이용함
public Human(String name, int age, int speed) {
this(name, age, speed, 0, 0);
}
// 위치정보 출력용 함수
public String getLocation() {
return "(" + x +","+ y + ")";
}
// 자신이 누군지 알 수 있도록하는 함수
public void printWhoami() {
System.out.println("i am " + name + " my age " + age);
}
}
public interface run {
void runable(int x, int y);
}
walk, run, swim 모두 위와같은 형식으로 만들었다.
public class grandParents extends Human implements walk {
//조부모님의 파라미터로 스피드를 받을 필요가 없으니 지운 다음
// super에서 스피드를 1 지정하여 name,age만 받도록 지정
public grandParents(String name, int age) {
super(name, age, 1);
}
//함수내용 구현
@Override
public void walkable(int x, int y) {
this.x=x;
this.y=y;
printWhoami();
System.out.println("speed= " + speed);
System.out.println("now"+getLocation());
}
}
public class Parents extends Human implements walk, run {
public Parents(String name, int age) {
super(name, age,3);
}
@Override
public void runable(int x, int y) {
this.x =x;
this.y =y;
this.speed += 2;
printWhoami();
System.out.println("speed= " + speed);
System.out.println("now"+getLocation());
}
@Override
public void walkable(int x, int y) {
this.x =x;
this.y =y;
printWhoami();
System.out.println("speed= " + speed);
System.out.println("now"+getLocation());
}
}
public class child extends Human implements walk,run,swim {
public child(String name, int age) {
super(name, age, 5);
// TODO Auto-generated constructor stub
}
@Override
public void swimable(int x, int y) {
this.x =x;
this.y=y;
printWhoami();
System.out.println("speed= " + speed);
System.out.println("now"+getLocation());
}
@Override
public void runable(int x, int y) {
this.x =x;
this.y=y;
printWhoami();
System.out.println("speed= " + speed);
System.out.println("now"+getLocation());
}
@Override
public void walkable(int x, int y) {
this.x =x;
this.y=y;
printWhoami();
System.out.println("speed= " + speed);
System.out.println("now"+getLocation());
}
}
public class _1_17 {
public static void main(String[] args) {
grandParents gP = new grandParents("lee",89);
Parents P = new Parents("seung",31);
child C = new child("woo",28);
System.out.println(gP.getLocation());
System.out.println(P.getLocation());
System.out.println(C.getLocation());
gP.walkable(1, 1);
P.walkable(1, 1);
C.walkable(1, 1);
// gP.runalbe(2, 2);
P.runable(2, 2);
C.runable(2, 2);
C.swimable(3,-1);
}
}
출력값
(0,0)
(0,0)
(0,0)
i am lee my age 89
speed= 1
now(1,1)
i am seung my age 31
speed= 3
now(1,1)
i am woo my age 28
speed= 5
now(1,1)
i am seung my age 31
speed= 5
now(2,2)
i am woo my age 28
speed= 5
now(2,2)
i am woo my age 28
speed= 5
now(3,-1)
'프로그래머 ,백준, 유튜브, 문제' 카테고리의 다른 글
[알고리즘 기초 100제] 5번 대소문자 변환 (0) | 2022.08.29 |
---|---|
백준 수학 10250 (0) | 2022.08.28 |
백준배열 1546 / 8958 (0) | 2022.08.23 |
[알고리즘 기초 100제] 2번 최빈수 구하기 (0) | 2022.08.22 |
[알고리즘 기초 100제] 1번 (0) | 2022.08.22 |
댓글