기록양식 (TIL)
1. 사용 개념
2. 의문점 or 문제
3. 시도해 본 것들(+응용) or 삽질
4. 해결
5. 알게 된 점(회고)
사용한 개념들
Scanner
switch
case
ArrayList
>while
>if
>break
Map
HashMap
>while
>if
>break
Set
LinkedHashSet
>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
은 그들을 도와주는hashmap
hashset
을 사용- 배열에 값을 추가 :
list
set
은add
를 활용.map
은 key값의 index를 추가put
을 활용- 값을 조회 :
list
map
은get
을 통해서 출력 /set
은 순서가 없어서iterator
를 사용