더 많이 실패하기

자바의정석 연습문제 풀이 7장 7-23 본문

자바/자바의정석-연습문제

자바의정석 연습문제 풀이 7장 7-23

김발자~ 2022. 10. 14. 22:01
반응형

자바의 정석 3판 연습문제 풀이

 

연습문제 파일은 아래 링크에서 다운받을 수 있다

https://github.com/castello/javajungsuk3/tree/master/%EC%97%B0%EC%8A%B5%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4

 

GitHub - castello/javajungsuk3: soure codes and ppt files of javajungsuk 3rd edition

soure codes and ppt files of javajungsuk 3rd edition - GitHub - castello/javajungsuk3: soure codes and ppt files of javajungsuk 3rd edition

github.com

 

 

http://www.yes24.com/Product/Goods/24259565

 

Java의 정석 - YES24

최근 7년동안 자바 분야의 베스트 셀러 1위를 지켜온 `자바의 정석`의 최신판. 저자가 카페에서 12년간 직접 독자들에게 답변을 해오면서 초보자가 어려워하는 부분을 잘 파악하고 쓴 책. 뿐만 아

www.yes24.com

자바의 정석 저자 남궁성 님이 직접 올려주신 문제다

 


7장은 총 29문제로 구성되어 있다

 


7-23


 

전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Exercise7_22_23 {
    
    static double sumArea(Shape[] arr) {
        double sum = 0;
        
        for(int i = 0; i < arr.length; i++) {
            sum += arr[i].calcArea();
        }
        return sum;
    }
    
    public static void main(String[] args) {
        Shape[] arr = {new Circle(5.0), new Rectangle(3,4), new Circle(1)};
        System.out.println("면적의 합:"+sumArea(arr));
    }
}
cs

 

 

답 코드

1
2
3
4
5
6
7
8
9
10
static double sumArea(Shape[] arr) {
    double sum = 0;
        
    for(int i = 0; i < arr.length; i++) {
        sum += arr[i].calcArea();
    }
    return sum;
}
    
 
cs

 

 

7-22까지 포함한 전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
public class Exercise7_22_23 {
    
    static double sumArea(Shape[] arr) {
        double sum = 0;
        
        for(int i = 0; i < arr.length; i++) {
            sum += arr[i].calcArea();
        }
        return sum;
    }
    
    public static void main(String[] args) {
        Shape[] arr = {new Circle(5.0), new Rectangle(3,4), new Circle(1)};
        System.out.println("면적의 합:"+sumArea(arr));
    }
}
 
abstract class Shape{
    Point p;
    
    Shape() {
        this(new Point(0,0));
    }
    
    Shape(Point p){
        this.p = p;
    }
    
    abstract double calcArea(); //도형의 면적을 계산해서 반환하는 메서드
    
    Point getPosition() {
        return p;
    }
    
    void setPosition(Point p) {
        this.p = p;
    }
}
 
class Circle extends Shape{
    double r;
    
    Circle(double r) {
        this(new Point(0,0), r); //Circle(Point p, double r)을 호출
    }
    
    Circle(Point p, double r){
        super(p);    //조상의 멤버는 조상의 생성자가 초기화
        this.r = r;
    }
    
    double calcArea() {
        return Math.PI * r * r;
    }
}
 
class Rectangle extends Shape{
    double width;
    double height;
    
    Rectangle(double width, double height) {
        this(new Point(0,0), width, height);
    }
    
    Rectangle(Point p, double width, double height){
        super(p);    
        this.width = width;
        this.height = height;
    }
 
    boolean isSquare() {
        return width*height != 0 && width == height;
    }
    
    double calcArea() {
        return width * height;
    }
}
 
class Point {
    int x;
    int y;
    
    Point() {
        this(0,0);
    }
    
    Point(int x, int y){
        this.x = x;
        this.y = y;
    }
    
    public String toString() {
        return "["+x+", "+y+"]";
    }
}
cs

 

Shape타입 배열에는 Shape의 자손 인스턴스가 들어있기 때문에
Shape클래스의 추상메서드 calcArea()를 호출해도
각 인스턴스에 완전히 구현된 calcArea()가 호출된다

 

 

 


 

반응형
Comments