프로그래밍 언어/JAVA

<Java> 명품 Java programming 4장 실습문제 5 ~ 8 해답

창조적생각 2021. 7. 6. 22:53

5. 다음 설명대로 Circle 클래스와 CircleManager 클래스를 완성하라.

 

- 문제 생략 -

[결과]


x,y,radius >>3.0 3.0 5
x,y,radius >>2.5 2.7 6
x,y,radius >>5.0 2.0 4
(3.0,3.0)5
(2.5,2.7)6
(5.0,2.0)4

 

[문제풀이]

 

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
import java.util.Scanner;
 
class Circle{
    private double x,y;
    private int radius;
    public Circle(double x, double y, int radius) {
        this.x = x;
        this.y = y;
        this.radius = radius;
    }
    public void show() {
        System.out.println("("+x+","+y+")"+radius);
    }
}
public class CircleManager {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        Circle c[] = new Circle[3];
        for(int i = 0; i<c.length; i++) {
            System.out.print("x,y,radius >>");
            double x = scanner.nextDouble();
            double y = scanner.nextDouble();
            int radius = scanner.nextInt();
            c[i] = new Circle(x,y,radius);
        }
        for(int i=0; i<c.length;i++)
            c[i].show();
        scanner.close();
    }
 
}
 
cs

 

6. 앞의 5번 문제는 정답이 공개되어 있다. 이 정답을 참고하여 Circle 클래스의 Circlemanager 클래스를 수정하여 다음 실행 결과처럼 되게 하라.

[실행결과]

x,y,radius >>3.0 3.0 5
x,y,radius >>2.5 2.7 6
x,y,radius >>5.0 2.0 4
가장 면적이 큰 원은(2.5,2.7)6

[풀이]

 

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
import java.util.Scanner;
 
class Circle{
    private double x,y;
    private int radius;
    public Circle(double x, double y, int radius) {
        this.x = x;
        this.y = y;
        this.radius = radius;
    }
    public void show() {
        System.out.println("가장 면적이 큰 원은("+x+","+y+")"+radius);
    }
    public double square() {
        return (radius)*(radius)*3.14;
    }
}
public class CircleManager {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        double biggest = 0;
        Circle c[] = new Circle[3];
        for(int i = 0; i<c.length; i++) {
            System.out.print("x,y,radius >>");
            double x = scanner.nextDouble();
            double y = scanner.nextDouble();
            int radius = scanner.nextInt();
            c[i] = new Circle(x,y,radius);
        }
        for (int i = 0; i<3;i++) {
        if(c[i].square() > biggest)
            biggest = c[i].square();}
        
        for(int i=0; i<c.length;i++)
            if(biggest == c[i].square())
                c[i].show();
        scanner.close();
    }
 
}
cs

7. 하루 할 일을 표현하는 클래스 Day는 다음과 같다. 한 달의 할 일을 표현하는 MonthSchedule 클래스를 작성하라.

 

 

1
2
3
4
5
6
7
8
9
class Day {
   private String work; //하루의 할 일을 나타내는 문자열
   public void set(String work) { this.work = work; }
   public String get() { return work; }
   public void show() {
      if(work == null) System.out.println("없습니다.");
      else System.out.println(work+"입니다.");
   }
}
cs

MonthSchedule 클래스에는 Day 객체 배열과 적절한 필드, 메소드를 작성하고 실행 예시처럼 입력, 보기, 끝내기 등의 3개의 기능을 작성하라.

 

[실행결과]

이번달 스케쥴 관리 프로그램.
할일(입력:1, 보기:2, 끝내기:3) >>1
날짜(1~30)?1
할일(빈칸없이입력)?자바공부

할일(입력:1, 보기:2, 끝내기:3) >>2
날짜(1~30)?1
1일의 할 일은 자바공부입니다.

할일(입력:1, 보기:2, 끝내기:3) >>3
프로그램을 종료합니다.

 

[풀이]

 

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
package MonthSchedule;
import java.util.Scanner;
 
class Day {
    private String work; // 하루의 할 일을 나타내는 문자열
    public void set(String work) { this.work = work; } //void set()을 작성하여 work 변수에 값을 받습니다. 차후에 조건을 추가할 수도 있습니다.
    public String get() { return work; } //get()을 작성하여 return 값으로 work가 출력되게 하는 메소드를 작성합니다.
    public void show() {
        if(work == null) System.out.println("없습니다.");
        else System.out.println(work + "입니다.");
    }
}
 
public class MonthSchedule {
    private int nDays; //달 안에 있는 날들을 위한 정수 변수 nDays를 지정합니다.
    private Day[] days; //Day Class를 배열로 지정합니다.
    private Scanner scanner;
    
    public MonthSchedule(int nDays) { //MonthSchedule의 실행자 작성
        this.nDays = nDays;
        this.days = new  Day[nDays];
        for(int i=0;i<days.length;i++) { // 앞에서 지정한 Day 클래스를 nDays만큼의 길이의 배열로 만듭니다.
            days[i] = new Day();  
        }
        scanner = new Scanner(System.in);
    }
    
    private void input() { // 1번 선택시 Day[]배열에 값을 입력시키기 위한 메소드를 작성합니다.
        System.out.print("날짜(1~30)?");
        int day = scanner.nextInt();
        System.out.print("할일(빈칸없이입력)");
        String work = scanner.next();
        day--; //배열은 0에서부터 시작함으로 1부터 시작하는 날짜보다 1이 작습니다. 그래서 1을 빼줍니다.
        
        if(day<0 || day>nDays) {
            System.out.println("날짜를 잘못 입력했습니다");
            return;
        }
       days[day].set(work); //days배열의 day 번째에 work값을 저장합니다.
    }
    
    private void view() { //2번을 눌렀을 시 보기를 출력하는 메소드입니다.
        System.out.print("날짜(1~30)?");
        int day = scanner.nextInt();
        day--;
        if(day<0 || day>nDays) {
            System.out.println("날짜를 잘못 입력했습니다");
            return;
        }
        System.out.print((day+1)+"일의 할일은 "); // 같은 이유로 여기서는 날짜가 출력되야 함으로 +1을 해줍니다.
       days[day].show(); // show 메소드를 소환합니다.
    }
    
    private void finish() {
        scanner.close();
        System.out.println("프로그램을 종료합니다.");
    }
    
    public void run() {
        System.out.println("이번달 스케줄 관리 프로그램");
        while(true) {
            System.out.print("할일(입력:1 ,보기:2, 끝내기3)>>");
            int menu = scanner.nextInt();
            switch(menu) {
            case 1:input();
            break; //반드시 break를 해줘야 while문에서 벗어날수 있습니다.
            case 2:view();
            break;
            case 3: finish();
            return; //return을 해주지 않으면 계속 돌아가서 오류가 납니다.
            default :
                System.out.println("잘못 입력했습니다");//
            }
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MonthSchedule april = new MonthSchedule(30);
        april.run();
    }
cs

8. 이름(name), 전화번호(tel) 필드와 생성자 등을 가진 phone 클래스를 작성하고, 실행 예시와 같이 작동하는 PhoneBook 클래스를 작성하라

 

[실행 결과]

인원수>>3
이름과 전화번호(이름과 번호는 빈 칸 없이 입력)>>황기태 777-7777
이름과 전화번호(이름과 번호는 빈 칸 없이 입력)>>나명품 999-9999
이름과 전화번호(이름과 번호는 빈 칸 없이 입력)>>최자바 333-1234
저장되었습니다...
검색할 이름>>황기순
황기순이 없습니다.
검색할 이름>>최자바
최자바의 번호는 333-1234입니다
검색할 이름>>그만

 

[풀이]

 

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
import java.util.Scanner;
class Phone{
    String name;
    String tel;
    Phone(String name, String tel) {
        this.name = name;
        this.tel = tel;
        }
        String getName() {return name;}
        String getTel() {return tel;}
 
}
 
class PhoneBook{
    Phone[] phone;
    Scanner scanner;
    
    PhoneBook(){
        scanner = new Scanner(System.in);
        }
    
        void run() {
        System.out.print("인원수>>");
        int cnt = scanner.nextInt();
        phone = new Phone[cnt]; //인원수 만큼 길이를 가지는 배열phone[]를 만듭니다.
        for(int i = 0; i < cnt; i++) {
            System.out.print("이름과 전화번호(이름과 번호는 빈 칸 없이 입력)>>");
            String name = scanner.next();
            String tel = scanner.next();
            phone[i] = new Phone(name,tel); //그리고 phone[]배열에 지정해줍니다.
            
        }
        System.out.println("저장되었습니다...");
        while(true) { //검색을 위한 while 문을 작성해줍니다.
        System.out.print("검색할 이름>>");
        String name = scanner.next();
        if(name.contentEquals("그만")) break;
        String tel = search(name); //tel 변수값을 찾기 위해 search() 메소드를 작성해줍니다.
        
        if(tel==null)
            System.out.println(name+"이 없습니다.");
        
        else System.out.println(name+"의 번호는 "+tel+"입니다");
        }
        
 
    }
        String search(String name) {
            for(int i=0;i<phone.length;i++) {
                if(phone[i].getName().equals(name)){
                    return phone[i].getTel();
                }
            }
            return null; //번호없음을 표시하기 위해 return값을 null로 해줍니다.
        }
 
 
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        PhoneBook phonebook = new PhoneBook();
       phonebook.run(); //프로그램을 메인에서 실행합니다.
    }
 
}
 
cs
728x90