Back-End/Java

명품 JAVA 에센셜 4장 실습 문제풀이

CJun 2021. 5. 30. 16:22
반응형

1. 아래 실행 결과와 같이 출력하는 다음 main()을 가진 Song 클래스를 작성하라.

Song 클래스는 노래 제목 title필드, 생성자, getTitle()메소드로 구성이 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example;
 
public class Song {
    String title;
    
    public Song(String title) {
        this.title = title;
    }
    
    public String getTitle() {
        return title;
    }
    
    public static void main(String[] args) {
        Song myChat = new Song("Good Morning");
        Song yourChat = new Song("Good Evening");
        
        System.out.println("나의 인사는" + myChat.getTitle());
        System.out.println("너의 인사는" + yourChat.getTitle());
    }
}
 
cs

 

2. 다음은 이름(name 필드)과 전화번호(tel 필드)를 가진 Phone클래스이다.

이름과 전화번호를 입력받아 2개의 Phone 객체를 생성하고, 출력하고

main() 메소드를 작성하시오.

 

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
package com.example;
 
import java.util.Scanner;
 
public class Phone {
    private String name;
    private String tel;
    public Phone(String name, String tel){
        this.name = name;
        this.tel = tel;
    }
    public String getName() {return name;}
    public String getTel() {return tel;}
    
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.print("이름과 전화번호 입력>>");
        Phone phone1 = new Phone(scanner.next(), scanner.next());
        System.out.print("이름과 전화번호 입력>>");
        Phone phone2 = new Phone(scanner.next(),scanner.next());
        System.out.println(phone1.getName() + "의 번호 " + phone1.getTel());
        System.out.println(phone2.getName() + "의 번호 " + phone2.getTel());
        scanner.close();    
        
        
    }
}
 
 
cs

 

3. 사각형을 표현하는 다음 Rect 클래스를 활용하여 Rect 객체 배열을 생성하고

사용자로부터 4개의 사각형을 입력받아 배열에 저장한 뒤 배열을 검색하여

사각형 면적의 합을 출력하는 main()메소드를 가진 RectArray 클래스를 작성하라.

 

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
package com.example;
 
import java.util.Scanner;
 
class Rect {
    private int width, height;
 
    public Rect(int width, int height) {
        this.width = width;
        this.height = height;
    }
 
    public int getArea() {
        return width * height;
    }
}
 
public class RectAry {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Rect[] a = new Rect[4];
        for(int i = 0; i < a.length; i++) {
            System.out.print(i + 1 + ".");
            System.out.print("너비와 높이를 입력하시오.");
            int width = sc.nextInt();
            int height = sc.nextInt();
            a[i] = new Rect(width,height);
            
        }
        System.out.println("저장완료");
        int result = 0;
        for(int i = 0; i < a.length; i++) {
            result = result + a[i].getArea();
            
        }
        System.out.println("사각형 넓이의 합은 " + result + "입니다.");
    }
}
 
cs

 

4. 이름(name)과 전화번호(tel)필드, 생성자 및 필요한 메소드를 가진 Phone 클래스를 작성하고

다음 실행 사례와 같이 작동하도록 main()을 가진 PhoneMagager 클래스를 작성하라.

한 사람의 전화번호는 하나의 Phone 객체로 다룬다.

 

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
package com.example;
 
 
import java.util.Scanner;
 
class Phone {
    private String name, tel;
    
    public Phone(String name, String tel) {
        this.name = name;
        this.tel = tel;
    }
    
    public String getName() {
        return name;
    }
    public String getTel() {
        return tel;
    }
    
}
 
public class PhoneManager {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("인원수>>");
        int num = sc.nextInt();
        Phone [] phone = new Phone[num];
        
        for(int i=0; i<num; i++) {
            System.out.print("이름과 전화번호(번호는 연속적으로 입력)>>");
            String name = sc.next();
            String tel = sc.next();
            
            phone[i] = new Phone(name, tel);
        }
        
        System.out.println("저장되었습니다...");
        
        while(true) {
            System.out.print("검색할 이름>>");
            String name = sc.next();
            String tel = "";
            
            if(name.equals("exit")) {
                System.out.println("프로그램을 종료합니다...");
                break;
            }
            
            else {
                for(int i=0; i<num; i++) {
                    if(name.equals(phone[i].getName()))
                        tel = phone[i].getTel();
                }
            }
            
            if(tel=="") {
                System.out.println(name+"이 없습니다.");
            }
            else {
                System.out.println(name + "의 번호는 " + tel + " 입니다.");
            }
        }
    }
}
 
cs

 

5. CircleManager는 static 메소드를 가진 클래스이다.

StaticTest 클래스는 static 메소드를 활용하는 사례를 보여준다.

실행 결과를 참고하여 코드를 완성하라.

 

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
package com.example;
 
 
class Circle {
    private int radius;
    public Circle(int radius) { this.radius = radius; }
    public int getRadius() { return this.radius; }
    public void setRadius(int radius) { this.radius = radius; }
}
 
class CircleManager {
    static void copy(Circle src, Circle dest) {
        dest.setRadius(src.getRadius());
    }
    static boolean equals(Circle a, Circle b) {
        if(a.getRadius() == b.getRadius())
            return true;
        else
            return false;
    }
}
 
public class StaticTest {
    public static void main(String[] args) {
        Circle pizza = new Circle(5);
        Circle waffle = new Circle(1);
        
        boolean res = CircleManager.equals(pizza, waffle);
        if(res = true)
            System.out.println("pizza와 waffle 크기 같음");
        else
            System.out.println("pizza와 waffle 크기 다름");
        
        CircleManager.copy(pizza, waffle);
        res = CircleManager.equals(pizza, waffle);
        if(res = true)
            System.out.println("pizza와 waffle 크기 같음");
        else
            System.out.println("pizza와 waffle 크기 다름");
    }
}
 
cs

 

6. 다음은 가로 세로로 구성되는 박스를 표현하는 Box 클래스와 이를 이용하는 코드이다.

Box의 draw()는 fill 필드에 지정된 문자로 자신을 그린다.

실행 결과를 보면서 코드를 완성시켜라.

 

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
package com.example;
 
 
public class Box {
    private int width, height;
    private char fillChar;
    public Box() {
        this(101);
    }
    public Box(int width, int height) {
        this.width = width;
        this.height = height;
    }
    public void draw() {
        for(int i=0; i<height; i++) {
            for(int j=0; j<width; j++)
                System.out.print(fillChar);
            System.out.println();
        }
    }
    public void fill(char c) {
        this.fillChar = c;
    }
 
    public static void main(String[] args) {
        Box a = new Box();
        Box b = new Box(203);
        a.fill('*');
        b.fill('%');
        a.draw();
        b.draw();
    }
}
 
cs

 

보너스 문제 1. 두사람이 번갈아 하는 겜블링 게임을 만들어보자.

0에서 2사이의 정수 3개를 랜덤하게 발생시켜 모두 같으면 승리한다.

선수는 Player 클래스로 표현한다. 실행 결과를 참고하여 다음 코드를 완성하라.

 

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
package com.example;
 
 
import java.util.Scanner;
 
class Player {
    private String name;
    public Player(String name) { this.name = name; }
    public String getName() { return name; }
}
 
public class GamblingGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Player [] p = new Player[2];
        
        for(int i=0; i<p.length; i++) {
            System.out.print("선수 이름 입력 >>");
            p[i] = new Player(scanner.next());
        }
        
        int n=0// 두 선수가 번갈아 게임하기 위한, n은 배열 p[]의 인덱스
        while(true) {
            System.out.print(p[n].getName() + "씨, <Enter 외 아무키나 치세요>");
            scanner.next(); // 입력된 키를 읽고 버림
            
            int [] val = new int [3];
            for(int i=0; i<val.length; i++) {
                val[i] = (int)(Math.random()*3); // 0~2 사이의 랜덤수 발생
                System.out.print(val[i] + "\t");
            }
            System.out.println();
            
            if(val[0]==val[1&& val[1]==val[2]) {
                System.out.println(p[n].getName() + "님이 승리하였습니다.");
                break;
            }
            n++// 다음 선수 인덱스, p[0] -> p[1]
            n = n%2// 인덱스가 2가 되면 다시 0으로 돌리기 위해. p[1] -> p[1], p[2] -> p[0]
        }
        scanner.close();
    }
}
 
 
cs
반응형