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