본문 바로가기
프로그래머 ,백준, 유튜브, 문제

자바 스파르타 1-17 객체지향퀴즈

by 리승우 2022. 8. 28.

객체지향에서 배운 개념과 문법을 이용해서 다음 요구조건을 만족하는 클래스를 작성하시요. 여러분이 게임을 만든다고 생각해보세요.

 

요구사항

  1. 사람은 자식, 부모님, 조부모님이 있다.
  2. 모든 사람은 이름, 나이, 현재 장소정보(x,y좌표)가 있다.
  3. 모든 사람은 걸을 수 있다. 장소(x, y좌표)로 이동한다.
  4. 자식과 부모님은 뛸 수 있다. 장소(x, y좌표)로 이동한다.
  5. 조부모님의 기본속도는 1이다. 부모의 기본속도는 3, 자식의 기본속도는 5이다.
  6. 뛸때는 속도가 기본속도대비 +2 빠르다.
  7. 수영할때는 속도가 기본속도대비 +1 빠르다.
  8. 자식만 수영을 할 수 있다. 장소(x, y좌표)로 이동한다.

위 요구사항을 만족하는 클래스들을 바탕으로, Main 함수를 다음 동작을 출력(System.out.println)하며 실행하도록 작성하시오. 이동하는 동작은 각자 순서가 맞아야 합니다.

  1. 모든 종류의 사람의 인스턴스는 1개씩 생성한다.
  2. 모든 사람의 처음 위치는 x,y 좌표가 (0,0)이다.
  3. 모든 사람의 이름, 나이, 속도, 현재위치를 확인한다.
  4. 걸을 수 있는 모든 사람이 (1, 1) 위치로 걷는다.
  5. 뛸 수 있는 모든 사람은 (2,2) 위치로 뛰어간다.
  6. 수영할 수 있는 모든 사람은 (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)

댓글