[JAVA] flag 변수

sua·2024년 1월 20일

📒 flag 변수

조건에 따라 true혹은 false값을 넣어주는 boolean형 변수

📌 Problem

Class : 도서리스트를 배열로 유지하며 관리하는 클래스

  • remove 메서드 : 도서객체 데이터필드 중 하나인 isbn 기준으로 해당 isbn을 가진 도서 정보를 삭제한다.
  • getList 메서드 : 도서 각각의 정보가 들어있는 book 반환 형태의 배열을 만들어서 배열에 null 값이 없도록 한다.
//도서 정보 삭제
    public void remove(String isbn){

        for(int i=0; i<size; i++) {
            if(books[i].getIsbn() == isbn) {
                books[i] = null;
            }
        }
    }

    //리스트 가져오기
    public Book[] getList() {
        Book[] result = new Book[size];
        for (int i=0; i<size; i++) {
            result[i] = books[i];
        } return result;
    }

problem

  • remove 메서드 : 도서 배열에 null값이 들어가게 된다.
  • getList 메서드 : 불필요한 배열인 result를 만들게 된다.

📌 Solution

  • flag 변수를 이용해서 배열 요소가 삭제되면 왼쪽으로 요소를 옮김
  • Arrays.copyof 를 이용해서 books 배열을 복사해서 옮김
public void remove(String isbn) {
    int idx = 0;
    //flag 변수 생성
    boolean flag = false;
    //books 배열에서 삭제할 isbn이 들어있는 인덱스를 찾아냄
    //flag는 true가 됨 & 해당 index 정보를 삭제함
    for (int i = 0; i < size; i++) {
        if (books[i].getIsbn().equals(isbn)) {
            flag = true;
            idx = i;
            books[i] = null;
        }
    }
    //flag == true 라면 (삭제할 요소가 있다면) 
    //해당 index의 요소는 null값으로 삭제 되었으므로
    //자리가 비어있는 index 바로 다음 index 요소를 왼쪽으로 옮겨줌
    //왼쪽으로 옮겨가면 뒤에 모든 요소도 옮겨줘야하고, 결국 제일 마지막 index가 비게 되므로
    //사이즈를 하나 삭제해줌
    if(flag) {
        for (int i = idx; i < size; i++) {
            books[i] = books[i+1];
        }
        books[size] = null;
        size--;
    }
}

// 등록된 사용자 리스트 반환
public Book[] getList() {

    return Arrays.copyOf(books, size);
}
profile
뼛속 문과생의 개발로그

0개의 댓글