메모장 구현하는 몸풀기 과제가 나왔다.
팀 역할에서 나는 삭제를 구현하는 맡았다
삭제 요구사항
public void deleteMemo(int idx) {
MemoVO memo = getMemo(idx);
if(memo == null){
System.out.println("해당 메모가 존재하지 않습니다.");
return;
}
else {
Scanner sc = new Scanner(System.in);
System.out.println("비밀번호를 입력 해주세요");
System.out.print("입력: ");
String pw = sc.nextLine();
if(memo.getPassword().equals(pw)){
int index = getMemoIndex(idx);
memos.remove(index-1);
updateIdx(idx);
System.out.println("선택하신 " + idx + "번 글이 삭제가 되었습니다.");
return;
}
else {
System.out.println("비밀번호가 일치 하지 않습니다!");
System.out.println("선택하신 " + idx + " 글 삭제가 되지 않습니다.");
return;
}
}
}
public MemoVO getMemo(int idx){
for(MemoVO m : memos){
if(m.getIdx() == idx) {
return m;
}
}
return null;
}
public int getMemoIndex(int idx){
int cnt = 0;
for(MemoVO m : memos){
cnt++;
if(m.getIdx() == idx) {
return cnt;
}
}
return 0;
}
public void updateIdx(int idx){
int i = 1;
for(MemoVO m : memos){
if(m.getIdx() == idx+i) {
m.setIdx(idx+i-1);
i++;
}
}
}
이건 전부 해결한 코드였지만
Out of Boundary 에러로 계속 삽질을 했지만...
linked list도 index가 0부터 시작한다는 걸 모르고
updateIdx 로직이 틀린줄 알고 계속 테스트를 해보았다updateIdx 로직이 틀린줄 알고 계속 테스트를 해보았다
int index = getMemoIndex(idx);
memos.remove(index-1);
맨 처음 코드는
memos.remove(index);
이였는데...
삭제를 여러개 까지는 다 되는데 맨 마지막 하나만 남았을 떄 out of boundary 에러가 나는 걸 보아.. index 문제라고 판단하여 index-1를 하니깐 깔끔하게 해결...
버그 찾는건 참 틀린그림 찾기 하는 기분이다...
하지만 버그를 찾고 코드가 잘 돌아가는걸 보면 기분은 좋다!