Java/Basic

게시판 중복검사, 삭제 구현 과제 (배열 ver.)

2023. 2. 27. 09:14
목차
  1. ▼ 내 주말 과제~

● 전체 코드 (강사님 ver.)

더보기
package product;

import java.util.Scanner;

public class ProductsService {
	private Products[] prods = new Products[30];
	private int cnt; // 제품 개수 카운트 변수

	public ProductsService(int size) {
		prods = new Products[size]; // size 만큼 방을 만든다.

	}

	// 새 상품 등록
	public void addProduct(Scanner sc) {
		if (cnt >= prods.length) { // cnt: 제품수, prods.length: 방의 개수
			System.out.println("배열이 다 찼습니다.");
			return; // 추가 취소.
		}
		int idx = 0;
		Products p = new Products();
		while (idx >= 0) {
			System.out.println("num: ");
			p.setNum(sc.nextInt());
			idx = getByNum(p.getNum()); // 중복:0이상의 값. 중복안됨:-1
		}
		System.out.println("name: ");
		p.setName(sc.next());
		System.out.println("route: ");
		p.setRoute(sc.next());
		System.out.println("sellerId: ");
		p.setSellerid(sc.next());
		System.out.println("price: ");
		p.setPrice(sc.nextInt());
		System.out.println("amount: ");
		p.setAmount(sc.nextInt());

		prods[cnt++] = p; // 배열에 넣은 다음 cnt 1 증가.
	}

	// 번호 검색 메서드
	public int getByNum(Scanner sc) {
		System.out.println("검색/수정/삭제할 제품 방 번호:");
		int num = sc.nextInt();

		// 배열에서 요소를 하나씩 꺼내서 제품번호와 num을 비교해 같은 것 찾음.
		for (int i = 0; i < cnt; i++) {
			if (prods[i].getNum() == num) {
				return i;
			}
		}
		return -1; // 못찾으면 루프 밖으로 나오게 됨.
	}

	// 파라메터로 검색할 번호 받아서 방 번호 리턴.
	public int getByNum(int num) {
		for (int i = 0; i < cnt; i++) {
			if (prods[i].getNum() == num) {
				return i;
			}
		}
		return -1;
	}

	// 검색해서 출력하는 메서드
	public void printProduct(Scanner sc) {
		int idx = getByNum(sc);

		if (idx < 0) {
			System.out.println("없다");
		} else {
			System.out.println(prods[idx]);
		}
	}

	public void editProduct(Scanner sc) {
		System.out.println("수정할 제품 방 번호:");
		int idx = getByNum(sc);

		if (idx < 0) {
			System.out.println("없다");
		} else {
			System.out.println("수정 전 데이터");
			System.out.println(prods[idx]);

			boolean flag = true;
			while (flag) {
				System.out.println("수정할 제품 정보\n1.num 2.name 3.route 4.sellerId 5.price 6.amount 7.종료");
				int x = sc.nextInt();
				switch (x) {
				case 1:
					System.out.println("new num: ");
					prods[idx].setNum(sc.nextInt());
					System.out.println(prods[idx]);
					break;
				case 2:
					System.out.println("new name: ");
					prods[idx].setName(sc.next());
					System.out.println(prods[idx]);
					break;
				case 3:
					System.out.println("new route: ");
					prods[idx].setRoute(sc.next());
					System.out.println(prods[idx]);
					break;
				case 4:
					System.out.println("new sellerId: ");
					prods[idx].setSellerid(sc.next());
					System.out.println(prods[idx]);
					break;
				case 5:
					System.out.println("new price: ");
					prods[idx].setPrice(sc.nextInt());
					System.out.println(prods[idx]);
					break;
				case 6:
					System.out.println("new amount: ");
					prods[idx].setAmount(sc.nextInt());
					System.out.println(prods[idx]);
					break;
				case 7:
					System.out.println("수정 종료");
					flag = false;
					break;
				}
			}
		}
	}

	// 삭제 메소드
	public void deleteProduct(Scanner sc) {
		System.out.println("삭제할 제품 방 번호:");
		int idx = getByNum(sc);
		if (idx < 0) {
			System.out.println("없다");
		} else {
			System.out.println(idx + "번째 방의 제품 정보를 삭제합니다");
			for (int i = idx; i < cnt - 1; i++) {
				prods[i] = prods[i + 1];
			}
			cnt--;	// 다음에 데이터가 추가되면 마지막 방에 덮어씌워짐.
		}
	}

	public void printAll() {
		for (int i = 0; i < cnt; i++) {
			System.out.println(prods[i]);
		}
	}

}

 

▼ 내 주말 과제~

1. 중복검사

System.out.println("num: ");
int num = sc.nextInt();
for (int i = 0; i < cnt; i++) {
	if (num == prods[i].getNum()) {
		System.out.println("중복. 다시 입력하세요.");
		return;
	}
}

-----------------------------------

▽ 짝꿍이 구현한 버전

더보기
public boolean duplicate (int num) {
	for (int i = 0; i < cnt; i++) {
		if (cnt == 0) {	   //첫번째에는 통과
    		return false;
    	} else if (num == prods[i].getNum) {
        	System.out.println ("중복입니다. 다시 입력해주세요.");
            return true;	//중복이면 while문 다시 실행.
        }
	}
    return false;	//중복이 아니면 p.setNum 반환.
}



boolean flag = true;
while(flag){
	System.out.println("num: ");
    p.setNum(Scanner sc);
    flag = duplicate(p.getNum());
}

-----------------------------------

▽ 강사님이 구현한 버전

더보기
// 파라메터로 검색할 번호 받아서 방 번호 리턴.
public int getByNum(int num) {
	for (int i = 0; i < cnt; i++) {
		if (prods[i].getNum() == num) {
			return i;	//중복 -> while문 다시 돎.
		}
	}
	return -1;	//중복 아님. 
}


int idx = 0;
Products p = new Products();
while (idx >= 0) {
	System.out.println("num: ");
	p.setNum(sc.nextInt());
	idx = getByNum(p.getNum()); // 중복:0이상의 값. 중복안됨:-1
}

 

2. 삭제

- 배열값 초기화 대신 

prods[cnt] = null; 을 사용하면

삭제한 뒤 배열값들 다시 추가할 때 널포인트오류 뜸 .. 흠

대신 배열값을 초기화하고 다시 배열값을 넣으면 

Products [num=2, name=2, route=2, sellerId=2, price=2, amount=2]
Products [num=3, name=3, route=3, sellerId=3, price=3, amount=3]
Products [num=0, name=null, route=null, sellerId=null, price=0, amount=0]    << 이렇게 중간에 남음 ㅜ
Products [num=1, name=1, route=1, sellerId=1, price=1, amount=1]
public void deleteProduct(Scanner sc) {
	System.out.println("삭제할 제품 방 번호:");
	int idx = getByNum(sc);
	if (idx < 0) {
		System.out.println("없다");
	} else {
		System.out.println(idx + "번째 방의 제품 정보를 삭제합니다");
		prods[cnt] = new Products(); // 배열값 초기화
		for (int i = idx; i < cnt; i++) {
			prods[i] = prods[i + 1];
		}
	}
}

-----------------------------------

▽ 강사님이 구현한 버전

더보기
public void deleteProduct(Scanner sc) {
	System.out.println("삭제할 제품 방 번호:");
	int idx = getByNum(sc);
	if (idx < 0) {
		System.out.println("없다");
	} else {
		System.out.println(idx + "번째 방의 제품 정보를 삭제합니다");
		for (int i = idx; i < cnt - 1; i++) {
			prods[i] = prods[i + 1];
		}
		cnt--;	// 다음에 데이터가 추가되면 마지막 방에 덮어씌워짐.
	}
}
저작자표시 (새창열림)
  1. ▼ 내 주말 과제~
'Java/Basic' 카테고리의 다른 글
  • [JAVA] lang 패키지(Object, String, StringBuilder, 랩퍼클래스)
  • [JAVA] 추상클래스, 인터페이스
  • 피카츄 게임 만들기
  • [JAVA] 상속(extends, super), 업캐스팅, 다운캐스팅, 다형성 구현
함s
함s
개발함
함함ː개발함
함s
함함ː
함s

CALENDAR

«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
  • 분류 전체보기 (210)
    • TIL (6)
      • thought (2)
    • Algorithm (81)
      • Basic (66)
      • Greedy (5)
      • Implementation (3)
      • DFS BFS (7)
      • Sorting (0)
    • Front (29)
      • HTML Css (7)
      • JavaScript (17)
      • Jquery (2)
      • Vue.js (2)
      • React.js (1)
    • Node.js (5)
    • Java (43)
      • Basic (22)
      • MVC -- JSP & Servlet (18)
      • Handler (1)
      • Data (2)
    • Spring (27)
      • Spring_inflearn (9)
      • Spring Boot (7)
      • MyBatis (1)
      • Spring Data JPA (7)
      • REST API (3)
    • SQL (2)
    • Mac (13)
    • Git (4)
    • Project (0)

블로그 메뉴

  • 홈
  • 방명록
  • 글쓰기

인기 글

최근 글

hELLO · Designed By 정상우.
함s
게시판 중복검사, 삭제 구현 과제 (배열 ver.)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.