Sparta/What I Learned

22.11.23

코딩하는 또롱이 2022. 11. 24. 03:23

끼약 오늘부터 바로 프로젝트라니,,,! 일단 링크드리스트보다 자바를 들어야겠다...!!!!고 생각했는데 ,,,, 들을 시간이 없었다...ㅜㅜㅜㅜ

 

🚨 메모장 구현하기

 

memoVO

더보기

package memo;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class MemoVO {
    //변수
    // private static int memoNum;  //입력할 글번호????? >글번호 증가할 때 사용할 변수..?
    private int no;                        //특정메모의 글번호 ????>인덱스 넘버..?
    private String name;
    private String password;
    private String content;

    private String memoDate;//임시



    public MemoVO(String name, String password, String content){
        this.no = MemoList.memoNum++;   // 1씩 증가
        this.name = name;
        this.password = password;
        this.content = content;
        this.memoDate = setConstructTime();
    }

    // Only for MemoList.updateMemo() method
    public MemoVO(int contentNum, String name, String password, String content){
        this.no = contentNum;
        this.name = name;
        this.password = password;
        this.content = content;
        this.memoDate = setConstructTime();
    }

    private String setConstructTime() {
        LocalDateTime date = LocalDateTime.now();

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd/HH:mm:ss");

        return dtf.format(date);
    }

    // getter
    public int getNo() {
        return no;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    public String getContent() {
        return content;
    }

    public String getMemodate() {
        return memoDate;
    }
}

memoList

더보기

package memo;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;

public class MemoList {
    private ArrayList<MemoVO> memos;
    public static int memoNum = 0;

    public MemoList(){
        this.memos = new ArrayList<>();
    }

    public void addMemo(String name, String password, String content){
        MemoVO memo = new MemoVO(name, password, content);
        memos.add(memo);
    }

    public void showAllMemos(){

        // for문 돌려서, 저거 걍 출력하면 됨. 포맷에 맞춰서.

        for(int i = memos.size()-1 ; i>=0; i--) {
            MemoVO memo = memos.get(i);

            String memoContentSample = "";

            if (memo.getContent().length() < 10)         // 10글자 미만일 때는 그냥 보여줌
                memoContentSample = memo.getContent();
            else                                        // 10글자 이상일 때는 10자까지 짤라 보여 줌.
                memoContentSample = memo.getContent().substring(0, 10);

            System.out.println("글 번호 : " + memo.getNo() + "\n작성자 : " + memo.getName() + "\n내용 : "
                    + memoContentSample + "\n시간 :" + memo.getMemodate() + "\n====================");
        }
    }

    public boolean checkMemoExistOrNot(int memoNum) {
        for( MemoVO memo : memos ){
            if(memo.getNo() == memoNum)
                return true;    // 존재함!
        }
        return false;   // 존재하지 않는 경우 false.
    }



    public String getMemoPasswordByNum(int memoNum){
        for( MemoVO memo : memos ){
            if( memo.getNo() == memoNum) {
                System.out.println("가게 해줘 ( if문 들어옴 )");
                return memo.getPassword();
            }
        }
        return "";
    }

    public void updateMemo(int memoNum, String newContent){
        for( MemoVO memo : memos){
            if( memo.getNo() == memoNum ){  // 주어진 글 번호와 메모리스트가 관리하는 메모의 글 번호가 동일하면 = 내가 수정하고자 하는 메모라면
                System.out.println("updateMemo() if문 들어옴.");
                MemoVO newMemo = new MemoVO(memo.getNo(),memo.getName(), memo.getPassword(), newContent);

                memos.remove(memo); // 해당 메모 삭제, 그 이후에 다시 새로운 메모를 append 해줌. = MemoVO에 setter를 만들지 않기 위함.
                System.out.println("updateMemo() remove 연산 수행.");
                memos.add(newMemo);

                break;
            }
        }

    }

    public void deleteMemo(int memoNum){
        for ( MemoVO memo : memos ){
            if ( memo.getNo() == memoNum ) { // 내가 삭제하고자 하는 메모라면
                memos.remove(memo); // 해당 메모 삭제
                break;
            }
        }
    }

}


//static class DateComparator implements Comparator<MemoVO> {
//    @Override
//    public int compare(MemoVO o1, MemoVO o2){
//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//
//        Date day1 = null;
//        Date day2 = null;
//
////        try {
////            day1 = format.parse(o1.getMemodate());
////        }
//    }
//}

 

memoService

더보기

package memo;

import java.text.NumberFormat;
import java.util.Scanner;

public class MemoService {

    void run(){

        MemoList memoList = new MemoList();

        while(true){
            showMenu();

            // 사용자에게 1~5번 사이 숫자를 받는다.
            Scanner s = new Scanner(System.in);

            int userInputNumber = -1;

            try {
                userInputNumber = Integer.parseInt(s.nextLine());
            } catch(NumberFormatException e){
                System.out.println("잘못된 입력입니다. 1~5사이 숫자로 다시 시도해주세요");
            }

            switch(userInputNumber){
                case 1:    // 1. 메모 쓰기
                    System.out.println("이름을 입력해주세요.");
                    String name = s.nextLine(); // 유저이름
                    System.out.println("비밀번호를 입력해주세요.");
                    String password = s.nextLine();
                    System.out.println("메모 내용을 자유롭게 작성해주세요");
                    String content = s.nextLine();
                    memoList.addMemo(name, password, content);
                    break;
                case 2:     // 2. 메모 목록보기
                    memoList.showAllMemos();
                    break;
                case 3:     // 3. 메모 수정하기
                    System.out.println("수정할 글 번호를 입력해주세요.");

                    int memoNumUp = -1;    // 초기값 설정. 글 번호에는
                    // memoNumUp => 업데이트 시키고 싶은 글번호
                    try {
                        memoNumUp = Integer.parseInt(s.nextLine());
                    }catch(NumberFormatException e){    // 정수가 아닌 이상한 값을 입력할 때.
                        System.out.println("잘못된 입력입니다. 정수값을 입력해주세요.");
                    }

                    if( memoNumUp == -1 ) // 잘못 입력했으면 break로 빠져나감.
                        break;

                    if ( memoList.checkMemoExistOrNot(memoNumUp) ) {  // 찾는 번호의 메모 존재 시

                        System.out.println("글의 비밀번호를 입력해주세요.");
                        String pw = s.nextLine();

                        if(pw.equals(memoList.getMemoPasswordByNum(memoNumUp))){
                            System.out.println("수정할 내용 작성 : ");
                            String newContent = s.nextLine();
                            memoList.updateMemo(memoNumUp, newContent);
                        } else {            // 비밀번홀가 틀렸다면
                            System.out.println("비밀번호가 틀렸습니다.");
                        }
                    } else {    // 찾는 번호의 메모 존재 x
                        System.out.println("찾으시는 번호에 해당하는 메모가 없습니다.");
                    }

                    break;

                case 4:             // 4. 메모 삭제
                    System.out.println("삭제할 글 번호를 입력해주세요.");

                    int memoNumDel = -1;    // 초기값 설정. 글 번호에는
                    // memoNumDel => 삭제하고 싶은 글번호
                    try {
                        memoNumDel = Integer.parseInt(s.nextLine());
                    }catch(NumberFormatException e){    // 정수가 아닌 이상한 값을 입력할 때.
                        System.out.println("잘못된 입력입니다. 정수값을 입력해주세요.");
                    }

                    if( memoNumDel == -1 ) // 잘못 입력했으면 break로 빠져나감.
                        break;

                    if ( memoList.checkMemoExistOrNot(memoNumDel) ) {  // 찾는 번호의 메모 존재 시

                        System.out.println("글의 비밀번호를 입력해주세요.");
                        String pw = s.nextLine();

                        if(pw.equals(memoList.getMemoPasswordByNum(memoNumDel))){
                            memoList.deleteMemo(memoNumDel);
                        } else {            // 비밀번홀가 틀렸다면
                            System.out.println("비밀번호가 틀렸습니다.");
                        }
                    } else {    // 찾는 번호의 메모 존재 x
                        System.out.println("찾으시는 번호에 해당하는 메모가 없습니다.");
                    }

                    break;
                case 5:
                    System.out.println("정상적으로 종료되었습니다.");
                    System.exit(0);
                    break;
                case -1:    // 잘못 입력한 경우이기에 아무 일도 일어나지 않음.
                    ;
            }


        }
    }

    void showMenu(){
        System.out.println("=====================");
        System.out.println("1. 메모 쓰기");
        System.out.println("2. 메모 목록보기");
        System.out.println("3. 메모 수정하기");
        System.out.println("4. 메모 삭제하기");
        System.out.println("5. 종료");
        System.out.println("=====================");
        System.out.println("입력 : ");
    }

}

 

Main

더보기

package memo;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        MemoService memoService = new MemoService();
        memoService.run();
    }
}


/*

ArrayList<Memo> memos = new ArrayList<>();

memos.add(memo1);
memos.add(memo2);
memos.add(memo3);

    memo1 - memo2 - memo3
시간  늦       중       빨
    [0]      [1]     [2]

최신 순 : 2->1->0

<updateMemo>
Memo memo = new Memo(); // 메모 정보를 다 담음.
memo2를 수정하고 싶어!
- memo2를 베낀 메모를 새로 만듬. : memo2' <- 메모 내용, 작성 시간 = 수정 시간으로 변경
- memo2를 지워버림
- memo2' 을 arraylist에 추가!(add)

     memo1 - memo3 - memo2'
시간    늦      중       빨
       [0]    [1]      [2]
수정할 때도, 날짜가 빠른 것부터 출력하는 순서는

인덱스 순서로, 2->1->0

<deleteMemo>

memos.add(memo4);
memos.add(memo5);

    memo1 - memo3 - memo2' - memo4 - memo5

시간   -> 갈수록 최신순.

출력순 : 인덱스 순서로 4->3->2->1->0


memos.updateMemo(memo3);

시간 memo1 - memo2' - memo4 - memo5 - memo3'

시간 -> 갈수록 최신
출력순 : 인덱스 큰 순 -> 작은 순.


memos.delete(memo2');

시간 memo1 - memo4 - memo5 - memo3'

출력순 : 인덱스 큰 순 -> 작은 순


모두 다 ArrayList가 순서를 가지면서 데이터를 저장하냐.


*/

 

휴.... 진짜 우리 팀장님이 제일 고생 많으셨고, 우리 팀원들 이것저것 전부 알아보고 적용한다고 힘들었다!!! 고생했어 일잘하조!!!!!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Q 1) 링크드 리스트의 끝에서 K번째 값을 반환하시오.

[6] -> [7] -> [8]
# 이런 링크드 리스트가 입력되었을 때 끝에서 2번째 값은 7을 반환해야 합니다!

 

 

Q 2) 배달의 민족 서버 개발자로 입사했다. 상점에서 현재 가능한 메뉴가 ["떡볶이", "만두", "오뎅", "사이다", "콜라"] 일 때, 유저가 ["오뎅", "콜라", "만두"] 를 주문했다. 그렇다면, 현재 주문 가능한 상태인지 여부를 반환하시오.

menus = ["떡볶이", "만두", "오뎅", "사이다", "콜라"]
orders = ["오뎅", "콜라", "만두"]

 

 

Q 3) 음이 아닌 정수들로 이루어진 배열이 있다. 이 수를 적절히 더하거나 빼서 특정한 숫자를 만들려고 한다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들기 위해서는 다음 다섯 방법을 쓸 수 있다.
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target_number이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 반환하시오.

numbers = [1, 1, 1, 1, 1]
target_number = 3

 

 

 


 

▶️ 객체지향언어 접근제어자 

import pkg.ModifierTest;

class Child extends ModifierTest {
    void callParentProtected() {
        System.out.println("call my parent's protected method.");
        super.messageProtected();
//      super는 상속받은 부모 키워드를 가르키는 키워드
    }
}

public class Main {
    public static void main(String[] args){
        ModifierTest modifierTest = new ModifierTest();
        modifierTest.messageOutside();
    }
}
// This is public Modifier
// This is private Modifier

 

 

 

 

 

'Sparta > What I Learned' 카테고리의 다른 글

22.11.25  (1) 2022.11.25
22.11.24  (0) 2022.11.24
22.11.22  (0) 2022.11.23
22.11.21  (0) 2022.11.22
22.11.20  (0) 2022.11.21