Point

/* 2차원 좌표 평면의 점을 타나내는 클래스 : Point
 * 멤버 변수 : x좌표, y좌표
 * 멤버 메소드 : 좌표를 출력하는 기능, 좌표를 이동하는 기능*/
public class Point {
	private int x,y; //private로 된 멤버변수 선언 ( private 타입 멤버변수)

	/* 기능	  : 멤버변수 x,y좌표를 출력하는 기능 
	 * 매개변수 : 없음(멤버 변수 x,y를 이용) 
	 * 리턴타입 : 없음 => void
	 * 메소드명 : print
	 *  */
	
	public void print() {
		//멤버변수(위에선언한x,y)를 멤버메소드에서 사용하는 경우, 따로 선언을 하지 않아도 됨. (지역변수와 다른 개념)
		System.out.println("(" + x + "," + y + ")");
	}
	/* 기능    : 지정된 좌표로 이동하는 메소드
	 * 매개변수 : 이동해야할 지정된 좌표 x, y => int x1, y1
	 * 리턴타입 : 없음 => void (이동하고 끝)
	 * 메소드명 : move
	 * */
	public void move(int x1, int y1) {
		x=x1;
		y=y1;
	}
	
	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;
	}
	
	
	/* 초기 x,y좌표가 x1, y1주어지면 주어진 x,y좌표로 멤버변수를 초기화하는 생성자*/
	public Point(int x1, int y1) {
		x =x1;
		y =y1;
	}
	public Point() {
							// public Point(int x1, int y1)~ } 는 생성자를 위에 써서 이전에 다른 클래스에서 가져간 point 값들이 쓰던 기본 생성자들이 자동으로 없어져서
	}						// public Point(){} 기본생성자 한줄을 추가해줘야 값을 가져간 다른 클래스들 오류가 해결 됨.	
	
	public Point(Point pt) {	//lu를 위한거껄?
		x = pt.x;
		y = pt.y;
	}
}

Rect

public class Rect {
	//너비 : width, 정수  & 높이 : height, 정수
	private int width, height;

	//왼쪽 위의 점 : leftUp (int로 표시하고싶으면 따로따로 만들어야 돼. int left, up => 관리 편하지 않음)
	private Point leftUp;
	
	//오른쪽 아래의 점 : rightDown
	private Point rightDown;
	
	/* 기능    : 사각형의 정보를 출력하는 메소드
	 * 매개변수 : 없음
	 * 리턴타입 : 없음 void
	 * 메소드명 : print 
	 *  */
	
	public void print () {
		System.out.print("왼쪽 위 점: ");
		leftUp.print();
		System.out.print("오른쪽 위 점: ");
		rightDown.print();
		System.out.println("너비: "+ width );
		System.out.println("높이: " + height);

	}
	/* 기능    : 주어진 좌표로 왼쪽위의 점을 이동시키는 메소드
	 * 매개변수 : 주어진 왼쪽 위의 좌표 => int x1, int y1
	 * 리턴타입 : 없음
	 * 메소드명 : move
	 *  */
	public void move(int x1, int y1) {
		//왼쪽 위의 점을 이동
		leftUp.move(x1, y1);
				
		//오른쪽 아래의 점을 이동 (왼쪽점만 이동하면 사각형이 그냥 커지는 것 처럼 됨)
		//x1을 기준으로 너비만큼 더해주고, y1을 기준으로 높이만큼 빼주면 됨.
		rightDown.move(x1+width, y1-height);
		
	}
	/* 기능    : 왼쪽위의점을 기준으로 사각형의 너비와 높이를 변경하는 메소드
	 * 매개변수 : 사각형의 너비와 높이 =>int w, int h
	 * 리턴타입 : 없음
	 * 메소드명 : resize
	 * */
	public void resize(int w, int h) {
		//너비와 높이를 수정 
		width = w;
		height = h;
		//오른쪽 아래의 점 수정 
		rightDown.move(leftUp.getX()+width,leftUp.getY()-height);
	}
	
	
	
	/* 기본 생성자 : 왼쪽위의 점을 나타내는 객체를 생성하고, 오른쪽 위의 점을 나타내는 객체를 생성 */
	public Rect() {
		leftUp = new Point(); 		//leftUp을 위에 선언만했는데, 선언했을 때 Point라는 클래스에서 좌표를 가지고와서 있는걸 써서 만들었음. 
		rightDown = new Point();	//그래서 위에 선언한 클래스명이랑 new뒤 초기화랑 같아야돼
	}
	/* 생성자		: 좌상점과 우하점이 주어지면 해당 점을 이용한 사각형이 되도록 초기화
	 * 				좌상점, 우하점 초기화, 너비와 높이도 계산해서 초기화 
	 * 매개변수	: 좌상점 우하점
	 * */
	public Rect(int left, int up, int right, int down) { //방법1
		leftUp = new Point(left, up);		//새로만들어줘야 함. 기본생성자할 때 만들어줬어도, 생성자가 두개면 하나만쓰기때문s에 이때 객체생성이 또 안된걸로 쳐질 수 있으니까 다시 생성하기.
		rightDown = new Point (right, down);
		width = right - left;	//좌표평면 기준으로 식 만들기
		height = up - down;
	}
	
	public Rect(Point lu, Point rd) {
		//leftUp = lu;	//lu와 leftUp은 같은 정보를 공유(참조변수는 값을 복사하는게 아니라, 주소를 공유하기때문에 값을 바꾸게되면 값이 모두같이 바뀜)
		//rightDown = rd;	//rd와 rightDown은 같은 정보를 공유
		leftUp = new Point(lu);
		rightDown = new Point(rd); //Point에다가 pt해주고 여기에 이렇게 해주면 값이 안바뀐대.........0도모르겠엉 ㅎ 
		
		width = rightDown.getX()-leftUp.getX();		//ctrl +shift 자동완성있어서 편하게 입력 가능
		height = leftUp.getY()-rightDown.getY();
	}
	

	
	
	
	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;
	}

	public Point getLeftUp() {
		return leftUp;
	}

	public void setLeftUp(Point leftUp) {
		this.leftUp = leftUp;
	}

	public Point getRightDown() {
		return rightDown;
	}

	public void setRightDown(Point rightDown) {
		this.rightDown = rightDown;
	}	

	

}

Circle

public class Circle {
	//중심좌표(x좌표, y좌표) 반지름 radius
	//private int x, y, radius;	//멤버변수 선언방법1(메인이나 메소드 안에 들어가면 안돼, 클래스 안에만)	
	
	private Point center = new Point();	//멤버변수 선언방법2
	private int radius;
	
	/* 기능    : 원의 중심점을 이동하는 메소드
	 * 매개변수 : 이동할 중심점 좌표(int x, int y)
	 * 리턴타입 : 없음 => void
	 * 메소드명 : move
	 *  */
	public void move(int x, int y) {
		//center의 x,y좌표를 매개변수 x,y로 이동시키는 코드
		center.move(x,y);		
	}
	/* 기능    : 원의 정보(Circle이라는 class = 나 가알고있음.)를 출력하는 메소드
	 * 매개변수 : 없음
	 * 리턴타입 : 없음 => void
	 * 메소드명 : print 
	 * */
	public void print() {
		/* 다음과 같이 출력되도록 코드를 작성하세요.
		 * 중심점 : (?,?)
		 * 반지름 : ? 
		 * */
		System.out.print("중심점: "); center.print();
		System.out.print("반지름: "+radius);
	}
	public Point getCenter() {
		return center;
	}
	public void setCenter(Point center) {
		this.center = center;
	}
	public int getRadius() {
		return radius;
	}
	//반지름의 길이를 수정하는 메소드
	public void setRadius(int radius) {
		this.radius = radius;
	}
}

ClassEx3

import day10.Point;	//생략 가능 : 같은 패키지에 있는 클래스이므로 

public class ClassEx3 {

	public static void main(String[] args) {
		//pt라는 객체를 선언 후 생성
		//객체 pt는 참조변수 
		//일반변수 : 타입이 기본타입으로 된 변수
		//참조변수 : 타입이 기본타입이 아닌 변수
		Point pt1=null;					//선언만 되고 생성이 안된 상태
		Point pt2= new Point();			//pt라는 객체를 선언 후 생성
		//pt1.print();					//에러 발생 : 객체가 생성되지 않은 상태에서 메소드를 호출했기 때문에
		pt2.print(); 					//작동됨 : 제품이 만들어지 상태라서
		pt2.move(4, 5);
		pt2.print();
		
		Point pt3=new Point(1,2);
		pt3.print();
		
	}

}

ClassEx4

import java.util.Scanner;

public class ClassEx4 {

	public static void main(String[] args) {
		/* 콘솔에서 x좌표와 y좌표를 입력받아 점을 만들고, 만들어진 점의 위치를 출력하는 예제*/ 

		Scanner scan = new Scanner (System.in);
		//콘솔에서 정수를 입력받아 변수에 저장하는 코드를 작성해보세요.
		System.out.print("좌표를 입력하세요(x, y순으로): ");
		int x = scan.nextInt();
		int y = scan.nextInt();
		
		//입력받은 좌표를 이용하여 점을 생성
		Point pt=new Point();
		
		//질문 : 만들어진 pt의 x,y좌표는? (0,0)
		pt.print(); //sysout같은건가바
		
		//pt의 초기값을 입력한 값인 4,5로 변경하는 코드를 작성하세요.
		pt.setX(x);
		pt.setY(y);
					
		pt.move(x, y);		//위에 두줄과 한줄이 같은 뜻임
		
		pt.print();
		
		scan.close();
		
	}

}

ClassEx5

public static void main(String[] args) {
		/* Circle 클래스를 이용하여 원 객체를 생성한 후 테스트 하는 예제*/
		Circle  c1 = new Circle();
		//클래스명 객체이름(맘대로) = new 클래스명(); 
		c1.print();
		
		//중심점을 5,5로 이동
		c1.move(5, 5);
		c1.print();
		
		//반지름 길이 변경 5로
		c1.setRadius(5);
		c1.print();
		
		//생성자를 설명하기 위한 Scanner 입력
		Scanner scan = new Scanner(System. in);
		//클래스  객체 = new [생성자             ]
		//Scanner라는 클래스를 이용하여 scan 객체를 선언하고, Scanner(System.in) 생성자를 이용하여 객체를 생성
		//new가 객체를 만들고, 만들어진 객체에 멤버변수를 Scanner(System.in) 생성자를 이용하여 초기화.
		int x = scan.nextInt();
		scan.close();
	}

}

ClassEx6

public static void main(String[] args) {
		/* Circle 클래스를 이용하여 원 객체를 생성한 후 테스트 하는 예제*/
		Circle  c1 = new Circle();
		//클래스명 객체이름(맘대로) = new 클래스명(); 
		c1.print();
		
		//중심점을 5,5로 이동
		c1.move(5, 5);
		c1.print();
		
		//반지름 길이 변경 5로
		c1.setRadius(5);
		c1.print();
		
		//생성자를 설명하기 위한 Scanner 입력
		Scanner scan = new Scanner(System. in);
		//클래스  객체 = new [생성자             ]
		//Scanner라는 클래스를 이용하여 scan 객체를 선언하고, Scanner(System.in) 생성자를 이용하여 객체를 생성
		//new가 객체를 만들고, 만들어진 객체에 멤버변수를 Scanner(System.in) 생성자를 이용하여 초기화.
		int x = scan.nextInt();
		scan.close();
	}

}