끼약 오늘부터 바로 프로젝트라니,,,! 일단 링크드리스트보다 자바를 들어야겠다...!!!!고 생각했는데 ,,,, 들을 시간이 없었다...ㅜㅜㅜㅜ
🚨 메모장 구현하기
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