기록양식 (TIL)
1. 사용 개념
2. 의문점 or 문제
3. 시도해 본 것들(+응용) or 삽질
4. 해결
5. 알게 된 점(회고)
사용한 개념들
Scannerswitchcase
ArrayList>while>if>breakMapHashMap>while>if>breakSetLinkedHashSet>while>if>break

풀이 접근
- 저장할 자료구조 >
배열👉 고정된 개수의 데이터가 아니기 때문에컬렉션- 사용자가 입력한
타이틀과레시피가 변수로 저장레시피가 여러개니까, 반복문을 사용해서 저장- 반복문 내에 조건문을 활용해서 "끝" 을 타이핑하면 종료
괄호 친 제목, 순서에 맞는 번호
시도 :
1. 배열 생성
2. 조건문 문법에서 막힘 >
arraylist > while 조건문 내에서 사용자가 입력한 값(레시피)가 배열로 돌면서 찍힌다. 그리고 "끝" 을 입력하면 종료된다.
arraylist , map, set >> 을 나누어서 해보기
📟. 입력
Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
String CollectionName = sc.next();
ArrayList<String> strList = new ArrayList<>();
while(true){
int i = 0;
System.out.println(i+ 1 + "." + CollectionName);
i++;
} if (CollectionName == "끝"){
break;
}
}
잘못 생각한 부분
사용자가 입력한 변수를 while문 바깥에서 변수를 지정>loop내의 변수는 loop안에서만 적용이 가능
while문 내에서 break; 로 끊어줘야 하는데, 위에 코드는 무한 루프 중 > while문 내에 if문 을 활용해서 탈출 // 조건문내에서 레시피 번호를 붙여주는게 아니라, 출력할 때 붙여주기, loop문 에서 변수는 loop문 에서만 적용
if문 내에서 == 연산자 기호를 사용해서 참을 찾으려는 시도 >> 문자열의 내용을 비교 하려면 Object.equals(변수, 입력값)으로 찾기 >String 변수는 참조형 주소를 가지고 있기 때문
배열문.add(변수)을 활용해서 값을 추가, 저장
for문을 통해서 출력 >> 조건에서 변수.length >변수.size()를 활용, 컬렉션은 동적 배열이기 때문에 정해진 길이가 아닌 사이즈로 설정
📟. 입력
public class _0_atest {
public static void main(String[] args) {
System.out.println("1. 사용한 배열을 입력하세요. > enter");
System.out.println("2. 제목을 입력하세요. > enter");
System.out.println("3. 레시피를 입력하세요. > enter");
Scanner sc = new Scanner(System.in);
String array = sc.nextLine();
String title = sc.nextLine();
ArrayList<String> strList = new ArrayList<>();
while(true) {
String text = sc.nextLine();
if (Objects.equals(text, "끝")) {
break;
}
strList.add(text);
}
System.out.println("[" + array + "," + title + "]");
for (int i = 0; i < strList.size(); i++) {
int number = i + 1;
System.out.println(number + "." + strList.get(i));
}
}
}
map
📟. 입력
Map<Integer, String> strMap = new HashMap<>();
int LineNumber = 1;
while(true){
String text = sc.nextLine();
if(Objects.equals(text, "끝")){
break;
}
strMap.put(LineNumber++,text);
}
title = "[ Map으로 저장된 " + title + "]";
System.out.println(title);
//strList 를 한줄씩
for (int i = 0; i < strMap.size(); i++) {
int number = i + 1;
System.out.println(number + "." + strMap.get(i+1));
}
break;
구조의 차이
생성 부분=Map의 기능HashMap을 활용해서 생성값 추가 부분= <키, 값> = <index,str> index값을 추가 생성 해야되기 때문에 숫자 변수 필요 /
LineNumber++> 뒤++, 기존 순번이 추가되고 나서 +넘버링 /add>put- 출력할 때
strMap.get(i)> i와 index값을 맞추기
set
📟. 입력
LinkedHashSet<String> strSet= new LinkedHashSet<>();
while(true){
String text = sc.nextLine();
if(Objects.equals(text, "끝")){
break;
}
strSet.add(text);
}
title = "[ Set으로 저장된 " + title + "]";
System.out.println(title);
Iterator iterator = strSet.iterator();
for (int i = 0; i < strSet.size(); i++) {
int number = i + 1;
System.out.println(number + "." + iterator.next());
}
break;
default:
System.out.println("저장할 수 없는 자료구조입니다.");
구조의 차이
생성 부분= 생성자가 없는Set은 기능HashSet을 활용해서 생성값 추가 부분=map과는 다르게 /arraylist와는 같게add로 리스트 추가- 출력할 때
strSet.get()> set을 한줄씩 출력하는 방법은Iterator을 활용해서 출력
Iterator순서가 없는 배열에서 사용 >set은 순서없고 중복없는 배열이기 때문에get을 사용하지
않음.get은 순서가 있는 배열을 조회할 때 사용.
![]() | ![]() |
|---|
왼쪽 = get을 사용 / 오른쪽 = Iterator 사용
공통 특징:
생성>반복문을 통해 배열>조건문을 통한 break;>조건문에서는 str을 비교할 땐 equals를 사용>배열에 값을 추가>배열문을 반복문을 통해 조회>동적배열에 맞는 size조건문 활용>조회한 것을 출력
차이점 :
- 생성자의 문법과 방식:
list는 그대로,map(key,value)과set은 그들을 도와주는hashmaphashset을 사용- 배열에 값을 추가 :
listset은add를 활용.map은 key값의 index를 추가put을 활용- 값을 조회 :
listmap은get을 통해서 출력 /set은 순서가 없어서iterator를 사용