본문 바로가기
It Study/POWER JAVA(기본서)

POWER JAVA 5장 LAB 책 정보 저장(응용)

by prlkt5200 2022. 10. 12.
반응형

하루 넘기고....일 끝나고 새벽까지 씨름한 다음에 드디어 성공했네요!

완성하면 별 거 아닌데, 그 전까지는 참 힘들었습니다.

개발자들이 받는 스트레스를 조금이나마 이해했습니다. 한정된 지식으로 시도를 해가며 부족한 것은

다른 자료를 공부하여 살을 채우는 과정이 생각보다 고된 것 같습니다. 

대신 성취감도 맛보니, 내가 왜 이 길로 가고싶은지를 확인할 수 있었습니다.

새벽이라 그런가 잡소리가 길었습니다.

 

 

아래에서 코드를 확인하시면 되는데, 해설본과 보기 편하게 주석이 없는 원본으로도 올렸습니다.

이번 문제에서 개인적으로 주의깊게 봐야하는 게 아래 4가지인 것 같습니다.

참고하실 분들은 참고하시면 됩니다.

 

1.arrayList를 활용해서 객체 생성하고 초기화 두 가지를 수행한다는 점

2.스캐너 입력에서 버퍼가 남아있을 경우 해결방법

3.while문 내부에 switch문이 있는 상태에서 break문으로만 반복이 종료가 안되어서 무한 반복이 될 수 있으니 조치를 취해야 한다는 점. 

4.equals()를 활용해 값을 비교하는 것

 

 

1.해설본

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package test;
 
import java.util.*;
 
public class Book {
    // 책의 제목과 평점, 그리고 몇 권 등록했는지 구분하기 위한 정적 변수를 선언했다.
    String title;
    double score;
    static int count;
    static boolean b = true;
 
    // 책 객체를 저장할 객체 배열이며 Book 클래스 타입으로 하였다.
    static ArrayList<Book> list = new ArrayList<Book>();
    // 스캐너 클래스를 활용하기 위해 코드를 넣었다.
    static Scanner sc = new Scanner(System.in);
 
    // 객체 값을 기본으로 해서 생성하기 위해 기본 생성자를 만들었다.
    public Book() {
    }
 
    // 매개변수 생성자는 책을 등록하는 메소드에서 활용한다.
    public Book(String title, double score) {
        this.title = title;
        this.score = score;
    }
 
    // 책을 등록하기 위한 메소드이다.
    public void BookRegistration() {
        System.out.println("책의 제목을 입력하세요: ");
 
        // 입력 버퍼가 남아있는 경우 nextLine(); 오류가 발생하기에
        // 한번 더 nextLine()을 써서 비워준다.
        String deleteBuffer = sc.nextLine();
        // 책 제목을 입력하는 것이다.
        this.title = sc.nextLine();
 
        System.out.println("책의 평점을 입력하세요: ");
        // 책의 평점을 입력하는 것이다.
        this.score = sc.nextDouble();
 
        // ArrayList add 메소드를 활용하여 ()의 객체를 만들어주는 것이다.
 
        // 책의 제목과 평점이 입력되면 그 값이 인수로 작용하여
        // 클래스의 매개변수 값으로 이동, 작용한다.
        // 그 다음에 필드 값을 초기화시킨 뒤 객체를 만들어준다.
 
        // 즉 list 참조값을 통해 배열객체의 add 메소드를 활용해서 객체를 추가한다고
        // 생각하면 된다.
        list.add(new Book(title, score));
    }
 
    // 책을 검색하기 위한 메소드이다.
    public void searchBook() {
 
        System.out.println("찾으려는 책의 제목을 입력하세요: ");
        String deleteBuffer = sc.nextLine();
        String searchName = sc.nextLine();
 
        for (Book all : list)
            if (all.title.equals(searchName)) {
                System.out.println("찾으시는 책 " + searchName + "을(를) 찾았습니다.");
                if (all.title.equals(searchName) == true) {
                    break;
                }
            } else if (all.title.equals(searchName) != true) {
                System.out.println(searchName + "을(를) 검색중입니다.");
            }
        System.out.println("죄송합니다 찾으시는 책이 없습니다.");
        ;
 
        // 배열 객체에서 찾는 문자열을 확인 가능한 메소드이다. 배열의 참조변수.contatins(참조값 or 기본 변수)
        /*
         * if (list.contains(searchName)) { System.out.println(searchName + "가 있습니다.");
         * } else { System.out.println(searchName + "가 없습니다.");
         * 
         * }
         */
    }
 
    // list에 저장된 객체의 값을 순차적으로 all 참조변수에 저장하고
    // 아래 출력문을 통해서 출력해준다.
    public void AllSearchBook() {
        System.out.println("======================");
        System.out.println("등록 도서현황");
 
        for (Book all : list)
            System.out.println("[제목: " + all.title + ", 평점: " + all.score + "]");
 
    }
 
    public int keyPad() {// 메뉴와 번호를 입력할 수 있는 시스템을 구성했다.
 
        System.out.println("======================");
        System.out.println("1.책 등록\n2.책 검색\n3.모든 책 출력\n4.종료");
        System.out.println("======================");
 
        System.out.println("번호를 입력하세요: ");
 
        // 번호를 입력하면 input 값이 인자로서 switch 매개변수로 이동한다.
        int input = sc.nextInt();
        return input;
    }
 
    public static void main(String[] args) {
        // 객체를 생성해주고, 그 아래에 메소드를 불러오는 데 활용한다.
        Book book = new Book();
 
        // switch에서 조건인 keyPad() 메소드가 실행됨에 따라 각 메소드 호출
        // 대신 주의할 점이 있다. while문으로 switch 문으로 감싸주게 되면
        // switch문에 해당 case를 만족하고 break문으로 빠져나와도 while문에서 조건이 참이면
        // switch문을 빠져나오지 못하고 바로 다시 반복이다. 그래서 while문의 조건식을 false로 바꾸는
        // 코드를 짜고 break로 빠져나오면 내가 원할 때 바로 반복문을 종료할 수 있다.
 
        while (b) {
            switch (book.keyPad()) {
 
            case 1:
                // 기본적으로 책 등록 메소드가 실행된다.
                book.BookRegistration();
                do {
 
                    // 다음 입력 문자열 값에 따라 if문이 실행되고 do while문 때문에 계속해서 반복이 된다.
                    // 반복을 종료 원할 시 no를 입력하면 된다.
                    System.out.println("계속 입력하시겠습니까?? 예, 아니오");
                    String yn = sc.next();
 
                    if (yn.equals("예")) {
                        book.BookRegistration();
                    } else if (yn.equals("아니오")) {
                        break;
                    } else {
                        System.out.println("잘못된 입력입니다.");
                        break;
                    }
                } while (true);
                continue;
            case 2:
                book.searchBook();
                b = false;
                break;
            case 3:
                book.AllSearchBook();
                b = false;
                break;
            case 4:
                System.out.println("시스템을 종료합니다.");
                b = false;
                break;
 
            }
        }
 
    }
}
 
cs

 

2.원본

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package test;
 
import java.util.*;
 
public class Book {
    String title;
    double score;
    static int count;
    static boolean b = true;
 
    static ArrayList<Book> list = new ArrayList<Book>();
    static Scanner sc = new Scanner(System.in);
 
    public Book() {
    }
 
    public Book(String title, double score) {
        this.title = title;
        this.score = score;
    }
 
    public void BookRegistration() {
 
        System.out.println("책의 제목을 입력하세요: ");
        String deleteBuffer = sc.nextLine();
        this.title = sc.nextLine();
 
        System.out.println("책의 평점을 입력하세요: ");
        this.score = sc.nextDouble();
 
        list.add(new Book(title, score));
    }
 
    public void searchBook() {
 
        System.out.println("찾으려는 책의 제목을 입력하세요: ");
        String deleteBuffer = sc.nextLine();
        String searchName = sc.nextLine();
 
        for (Book all : list)
 
            if (all.title.equals(searchName)) {
                System.out.println("찾으시는 책 " + searchName + "을(를) 찾았습니다.");
 
                if (all.title.equals(searchName) == true) {
                    break;
                }
            } else if (all.title.equals(searchName) != true) {
                System.out.println(searchName + "을(를) 검색중입니다.");
            }
        System.out.println("죄송합니다 찾으시는 책이 없습니다.");
        ;
    }
 
    public void AllSearchBook() {
 
        System.out.println("======================");
        System.out.println("등록 도서현황");
 
        for (Book all : list)
            System.out.println("[제목: " + all.title + ", 평점: " + all.score + "]");
    }
 
    public int keyPad() {
 
        System.out.println("======================");
        System.out.println("1.책 등록\n2.책 검색\n3.모든 책 출력\n4.종료");
        System.out.println("======================");
 
        System.out.println("번호를 입력하세요: ");
        int input = sc.nextInt();
        return input;
    }
 
    public static void main(String[] args) {
        Book book = new Book();
        while (b) {
            switch (book.keyPad()) {
            case 1:
                book.BookRegistration();
                do {
                    System.out.println("계속 입력하시겠습니까?? 예, 아니오");
                    String yn = sc.next();
 
                    if (yn.equals("예")) {
                        book.BookRegistration();
                    } else if (yn.equals("아니오")) {
                        break;
                    } else {
                        System.out.println("잘못된 입력입니다.");
                        break;
                    }
                } while (true);
                continue;
            case 2:
                book.searchBook();
                b = false;
                break;
            case 3:
                book.AllSearchBook();
                b = false;
                break;
            case 4:
                System.out.println("시스템을 종료합니다.");
                b = false;
                break;
            }
        }
    }
}
 
cs
반응형