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.
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 |