어제 내일배움캠프에서 준 자바기초 강의 2주차를 배우고 if, for, while, do while, continue, break, collection(List,Set,Map)을 배우고 배운 것을 문제를 풀어보는 시간을 가졌다
일단 자료구조 List, Set, Map중에 하나를 사용자가 골라서 그 자료구조에 레시피를 담는 문제였다
do while을 써서 사용자가 List, Set, Map이외의 것을 적으면
다시 적게 할려고 했다
do {
System.out.println("저장할 자료구조명을 입력하세요 (List / Set / Map)");
ds = sc.next();
} while(Condition);
Condition만 코드를 넣어서 다시 보겠습니다
} while(ds != "List" && ds != "Set" && ds != "Map");
c++에 익숙했던 저는 위에 코드처럼 당연히 적고 돌렸는데 무한루프가 돌았습니다.
그래서 condition부분 조건이 내가 아는게 아닌가 해서 반대로 넣어봐도 해결을 하지 못했습니다. 결국 구글링에 do while법을 다시 찾아보는데
c++이랑 다르게 java는 string 클래스라서 참조형 변수였던 거라서 단순 비교는 못하는거였다...
그래서 수정 부분
} while(!"List".equals(ds) && !"Set".equals(ds) && !"Map".equals(ds));
하니 잘 된다...
Java만의 String 특성을 다시 깨우친거 같다!!
저장할 자료구조를 치고 요리제목을 받아야 하는데 자꾸 개행이 안되는 문제가 있었다
System.out.println("저장할 자료구조명을 입력하세요 (List / Set / Map)");
ds = sc.next();
String recipe;
System.out.println("요리 제목을 입력해주세요");
String foodName = sc.nextLine();
System.out.println("요리 레시피를 한 문장씩 입력해주세요");
System.out.println("입력을 마치고 싶으면 '끝'을 적어주세요");
.next() 다음에 사용된 .nextLine()은 개행문자(엔터)때문에 안되는 것이였다
그래서 sc.nextLine(); 만 추가하면 해결되는 간단한 문제였다
요리제목 다음 라인에 유저가 타자칠수 있게 되었다
무한 while에 빠졌다
사실 빠진줄도 몰랐다 print를 찍어보니.. 무한 루프였다
이유는 단순하게도 입력을 받고 vaild 입력이 아니면 whill문으로 다시 입력을 받아주는건데 입력을 안 받아 주니 vaild 값이 무한적으로 도는거였다...
저는 c++를 주로 써서 Scanner를 안 쓰다보니 이번 문제에서 해맨거 같다!
do while이랑 while이랑 차이점을 잘 알게 되었습니다
막상 문제를 푸니깐... 생각한 만큼 잘 안 되는거 같아서 놀랬다..
개념은 쉽고 다 아는거라고 쉽게 본거 같아
반성하는 시간을 가진거 같다