본문 바로가기
개발 일지/Day by day

2024-01-03 TIL

by 쁘띠뀨띠 2024. 1. 3.
요리 레시피 메모장 만들기
입력값
- 요리제목
- 레시피 입력
- "끝" 으로 프로그램 종료
출력값
- 대괄호안에 자료구조명 + 요리제목
- 순서리스트 + 레시피
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