코딩/JAVA

오케~ 또시피~

Funold 2023. 10. 16. 12:09

231016CW

 

2주차 과제로 또 요리 레시피가 나왔다.

기존 레시피를 List, Map, Set을 활용해 재코딩 해보는 건데, 이번엔 참조자료를 먼저 봤다. 강의 1회차 훅훅 넘어가는걸 권장하는데 과제에서 탁 막히다보니 쩔 수가 없다.

모른다고 대충 제출하고 넘어가는 것 보단 훨씬 정신건강에 이롭다.

 

Scanner sc = new Scanner(System.in);

        String CollectionName = sc.next();
        String title = sc.nextLine();

이번에도 스캐너부터 박고본다.

List, Map, Set문 중 선택 입력을 받기위한 CollectionName 한 줄,

그 다음 타이틀을 위한 한 줄.

 

switch (CollectionName) {

입력 될 형식문에 따라 식이 적용 되도록 switch문을 사용한다.

 

case "List":
                ArrayList<String> strList = new ArrayList<>();
                while (true) {
                    // 한 줄 씩 입력 받아서 strList에 저장하게끔
                    String text = sc.nextLine();
                    if (Objects.equals(text, "끝")) {
                        break;
                    }
                    strList.add(text);

List형으로 받기 위한 문단.

ArrayList를 선언해주고 while문으로 입력값을 받다가, 마무리로 “끝” 을 입력하면 break로 반복을 멈추도록 if문을 활용한다.

입력값이 “끝”이 아닌 한 입력된 문장들은 List배열에 추가(strList.add(text);)된다.

 

입력을 위한 문단은 끝, 출력을 위한 문단 작성.

                }
                title = "[ List로 저장된 " + title + " ]"; // 괄호로 감싸준 제목
                System.out.println(title);

                // strList를 한 줄 씩 출력
                for (int i = 0; i < strList.size(); i++) {
                    int num = i + 1;
                    System.out.println(num + ". " + strList.get(i));
                }
                break;

title을 먼저 출력시키고, 다음 문장들을 for문 활용으로 ArrayList배열의 크기만큼 반복 출력하도록 한다.

이 때 ArrayList의 크기는 위 입력용 문단에서 “끝”으로 break 되기 전까지이다.

 

오키… 테스트 간다.

 

? 타이틀에 번호는 왜 붙으셨어요 ?

 

 

잠시 몇 가지 삽질을 한 후 해결했는데, 두 가지가 있다.

  1. 삽질을 했는데 진짜 삽질이었다.
  2. 찐 간단한 문제였다.

먼저 1.

case "List":
                ArrayList<String> strList = new ArrayList<>();
                while (true) {
                    // 한 줄 씩 입력 받아서 strList에 저장하게끔
                    String text = sc.nextLine();
                    if (Objects.equals(text, "끝")) {
                        break;
                    }
                    strList.add(text); **<-----------여기(1)**
                }
                title = "[ List로 저장된 " + title + " ]";
                System.out.println(title);

                // strList를 한 줄 씩 출력
                for (int i = 0; i < strList.size(); i++) {
                    int num = i + 1;
                    System.out.println(num + ". " + strList.get(i)); **<----여기(2)**
                }
                break;

표시한 여기(1)의 문장에서 ‘text’로 받고, 여기(2)에서 번호를 붙여 출력시키는데, title로 입력받은 값이 저기에 딸려들어가서 번호가 붙나 싶었다.

 

??? : “text로 받아 출력시키는데에 title이 왜들어감?”

 

…초보자의 실수로 받아주도록 하고, 삽질하던 그 때 상태로 돌아가자.

 

‘어맛! text값을 받기 전에 title을 따로 받아주고 출력시켜주면 되잖아!?’

??? : “? title 값은 아까 맨 위에서 이미 받았잖아.”

…받아주자2

 

여하튼 저렇게 하니까 바라는 데로 실행은 되더라.

 

그럼 어디서 삽질이라는 걸 알았느냐.

 

이전 날 왠종일의 또다른 삽질로 IntelliJ와 GitHub을 연동시켜놨기에 위 코딩을 성공하고 나서 Push를 한 번 하려 했다.

그런데 Warning이 떠서 메세지를 봤는데,

title 변수가 한 번도 사용이 안됬다더라.

그래서 뭐지? 하면서 위를 봤는데, 그제서야 title은 이미 변수로 선언되어 있고, 그 후 text 출력하는 문에서 title이랑 별개라는 걸 알게 된 거였다. 삽질당시 List문 내의 title을 => titleText 로 바꿔버렸는데, 그러자 List 바깥의 title이 갑자기 껍데기가 되면서 경고가 뜬 거였다.

 

2. 그럼 뭐가 문제였지? 하면서 삽질 내용을 지우고 다시 자세히 보니,

바로 이전 1주차 과제(과제맞춤용버전) 때 마주했던 비슷한 문제였다.

접 때 도 다음 출력하는 줄들이 밀리던 문제가 있어서,

Float input = sc.nextFloat(); 아래에 String clear = sc.nextLine(); 을 빈 줄로 잡아 해결했었다.

 

그래서 이번에도 동일하게 해결 하려다가, ‘어 그냥 애초에 nextLine으로 잡아버리면 되지 않음?’ 하는 생각이 들었다.

 

        String CollectionName = sc.nextLine(); //'Line'만 붙이고 끝.

중간에 입력하다 “팁”이 뜬금없이 들어갔는데 무시하자. 결과가 잘 나왔으니!

타이틀에 하트♡ 가니쉬까지 넣어서 완성했다.

 

Map과, Set문도 완료했는데, 글이 너무 길어져서 이 부분은 따로 올려야겠다.

 

참으로 삽질 요란하게 하면서 공부하고 있는데, 터져가는 머리는 둘 째 치고 재밌다.

개발자들은 다 이런 맛으로 사는 건가? …하는 생각을 해보며 마무리 해본다.

'코딩 > JAVA' 카테고리의 다른 글

TPJ-호텔 예약 프로그램 (3)  (1) 2023.11.01
TPJ-호텔 예약 프로그램 (2)  (1) 2023.11.01
TPJ-호텔 예약 프로그램 (1)  (0) 2023.11.01
충격과 공포와 반전의 과제용 COOKING RECIPE  (1) 2023.10.14
Cooking Recipe.  (0) 2023.10.13