요리 레시피 메모장 만들기
입력값 - 요리제목 - 레시피 입력 - "끝" 으로 프로그램 종료 |
출력값 - 대괄호안에 자료구조명 + 요리제목 - 순서리스트 + 레시피 |
package week02.homeWork;
import java.util.ArrayList;
import java.util.Scanner;
public class HomeWork {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String collection = sc.nextLine();
String title = sc.nextLine();
switch (collection){
case "List" :
ArrayList<String> recipeList = new ArrayList<>();
while (true) {
String text = sc.nextLine();
if (text.equals("끝")) {
break;
}
recipeList.add(text);
}
title = "[List " + title + "]";
System.out.println(title);
for (int i = 0; i < recipeList.size(); i++) {
int listNum = i+1;
System.out.println(listNum +"."+recipeList.get(i));
}
break;
}
}
}
먼저 Scanner 선언으로 입력값을 받을 준비를한다. collection과 title 값을 받을 변수를 먼저 지정해놓고
swith문을 통해 case가 List, Set, Map 일 경우를 각각 보여 줄 예정
* if문은 if(collection.equals("자료구조명")){} else if (collection.equals("자료구조명")){} else if ~ else 를 사용하면된다(?)
레시피들을 담을 리스트를 recipeList로 하나 만들고 while문을 통해 "끝"이라는 입력값이 들어가기 전까지 실행시켜준다.
처음에 String타입이라
if (text == "끝") {
break;
}
아무리 끝을 외쳐도 절대 끝나지 않더라....// .equals()를 꼭 사용하자
* == / .equals() : ==는 주소값을 비교, equals()는 값을 비교.
String str = "스트링"; String str1 = str; String str2 = new String("스트링");
str과 str1은 같은 주소를 바라보기때문에 두 다 "스트링"으로 == 로 비교 가능하지만
str2는 새로운 객체를 생성함으로써 str, str1과 다른 주소값을 받는다. 그래서 ==로 비교 불가능하다.
내용물 문자열을 비교하고싶다면 equals()로 비교해야한다.
sc(스캐너)가 new Scanner로 하나하나의 객체를 가져오기에 equals를 사용해야하는게 아닌가싶다.
case "Map" :
//Map<key, value>
Map<Integer, String> recipeMap = new HashMap<>();
int lineNumber = 0;
while (true) {
String text = sc.nextLine();
if (text.equals("끝")) {
break;
}
//put(index, 값)
recipeMap.put(lineNumber++,text);
}
title = "[Map " + title + "]";
System.out.println(title);
for (int i = 0; i < recipeMap.size(); i++) {
int listNum = i+1;
System.out.println(listNum +"."+recipeMap.get(i));
}
break;
list를 복사해 Map으로, Map은 key값과 value가 하나의 쌍으로 저장되는 방식이라
Map<key ,value>로 선언을 시작한다. 끝내는 if 문을 그대로 두고 List에서 사용한 add를 put으로 변경
put(index값, text) index를 0으로 고정하면 2부터는 1.null으로 출력된다.
반복을 통해 새로운 값을 계속 받기에 변수++를 넣고 int lineNumber = 0; 로 지정
레시피를 입력할때마다 0, 1, 2, 3 ~ 중가하고, for문 출력라인의 마지막 get(i) 0부터 증감.
입력받을때 1부터 받고 싶다면 아래와 같이 변수코드를 수정하고 로 변경 후 get(i+1)로 코드 변경.
int lineNumber = i + 1;
'개발 일지 > Day by day' 카테고리의 다른 글
2024-01-31 TIL (0) | 2024.01.31 |
---|---|
2024-01-26 TIL (1) | 2024.01.26 |
2024-01-23 TIL (1) | 2024.01.24 |
2024-01-18 TIL (0) | 2024.01.18 |
2024-01-02 TIL (0) | 2024.01.02 |