(내일배움캠프) TIL(6) - 4주차: 인덱스 범위 설정 실수

Thomas·2023년 6월 5일
0
post-thumbnail

메모장 구현하는 몸풀기 과제가 나왔다.

팀 역할에서 나는 삭제를 구현하는 맡았다

삭제 요구사항

deleteMemo(int idx)

  • 제할 글 번호를 입력 받는다
  • 삭제할 글이 존재하면 글을 삭제하고 존재하지 않으면 존재하지 않는다는 메시지를 출력한다.
  • 삭제할 글의 비밀번호를 입력 받고 비밀번호 일치 여부를 판단한다.
  • 삭제 시 글 번호를 넘겨 받고 리스트에서 글 번호에 해당하는 글 1건을 얻어와 리턴 시키는 메소드가 있다.
  • 글 1건을 삭제하는 메소드가 있다.
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;
            }
        }
    }

해당 memo 객체 접근

    public MemoVO getMemo(int idx){
        for(MemoVO m : memos){
            if(m.getIdx() == idx) {
                return m;
            }
        }
        return null;
    }

해당 memo 인덱스 얻기

 public int getMemoIndex(int idx){
        int cnt = 0;
        for(MemoVO m : memos){
            cnt++;
            if(m.getIdx() == idx) {
                return cnt;
            }
        }
        return 0;
    }

updateIdx(int idx)

  • 글 삭제 후 글 번호를 다시 붙여준다.
  • 글이 삭제된 후 새 글이 입력될 때 idx가 기존 idx값에 이어서 1씩 증가할 수 있도록 count의 값을 수정한다.
    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를 하니깐 깔끔하게 해결...

버그 찾는건 참 틀린그림 찾기 하는 기분이다...
하지만 버그를 찾고 코드가 잘 돌아가는걸 보면 기분은 좋다!

profile
Backend Programmer

0개의 댓글