본문 바로가기

국비교육/국비교육 복습

day17_api.util.collection2_Test03 : Set 활용 - 좋아요 누르기 + Set의 요소 출력 복습 (★★)

사용자에게 글 번호를 입력받아 해당하는 번호의 게시물에 좋아요를 설정/해제하는 프로그램을 구현하세요

 

요구사항

- 사용자에게 글 번호를 입력받는다

- 글 번호를 Set을 이용하여 저장하거나 삭제하도록 구현한다

- 좋아요를 누른 적이 없는 글 번호가 입력된 경우 ?번 글에 좋아요를 눌렀습니다 출력 후 저장소에 번호를 저장한다

- 좋아요를 누른 적이 있는 글 번호가 입력된 경우 ?번 글에 좋아요를 취소했습니다 출력 후 저장소에서 번호를 제거한다

- 0을 입력하면 프로그램을 종료하고 종료 직전까지 좋아요를 누른 모든 게시글의 번호를 오름차순으로 출력한다.

 

메인 메소드 (1)

- Iterator를 이용한 출력

package day17_api.util.collection2;

import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Test03 {

	public static void main(String[] args) {
		
		// 글 번호를 저장하는 Set 생성
		Set<Integer> set = new TreeSet<>();
		
		// Scanner 생성
		Scanner sc = new Scanner(System.in);
		
		while(true) {
			// 입력
			System.out.print("글 번호 입력 : ");
			int textNum = sc.nextInt();
			sc.nextLine();
			
			// 종료 조건
			if(textNum == 0) {
				break;
			}
			
			// 판정
			if(set.contains(textNum)) {
				set.remove(textNum);
				System.out.println(textNum +"번 글에 좋아요를 취소했습니다");
			}
			else {
				set.add(textNum);
				System.out.println(textNum + "번 글에 좋아요를 눌렀습니다");
			}
		}
		
		// 1) Iterator를 활용한 Set의 요소 출력
		System.out.print("좋아요를 누른 글 번호 : ");
		Iterator<Integer> iter = set.iterator();
		while(iter.hasNext()) {
			int number = iter.next();
			System.out.println(number);
		}
		
		sc.close();
	}
}

 

메인 메소드 (2)

- 확장형 for문을 이용한 출력

package day17_api.util.collection2;

import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Test03 {

	public static void main(String[] args) {
		
		// 글 번호를 저장하는 Set 생성
		Set<Integer> set = new TreeSet<>();
		
		// Scanner 생성
		Scanner sc = new Scanner(System.in);
		
		while(true) {
			// 입력
			System.out.print("글 번호 입력 : ");
			int textNum = sc.nextInt();
			sc.nextLine();
			
			// 종료 조건
			if(textNum == 0) {
				break;
			}
			
			// 판정
			if(set.contains(textNum)) {
				set.remove(textNum);
				System.out.println(textNum +"번 글에 좋아요를 취소했습니다");
			}
			else {
				set.add(textNum);
				System.out.println(textNum + "번 글에 좋아요를 눌렀습니다");
			}
		}
		
		// 2) 확장형 for문을 활용한 Set의 요소 출력
		System.out.print("좋아요를 누른 글 번호 : ");
		for(int number : set) {
			System.out.print(number + "번 ");
		}
		
		sc.close();
	}
}

 

** 복습 : Set의 값을 하나씩 출력하는 방법

1) Iterator(반복자) 라는 별개의 저장소로 이동 후 출력

- .hasNext() : 포함 여부 판정

- .next() : 공백 전까지의 값을 반환

Iterator<Integer> iter = set.iterator();

while(iter.hasNext()) {
	int number = iter.next();
	System.out.println(number);
}

 

2) 확장형 for문 사용 (List, Set 뿐만 아니라 배열에서도 사용할 수 있다)

for(int number : set) {
	System.out.print(number + "번 ");
}

 

3) 배열로 복사하거나 List로 복사 (비추천 - 메모리 낭비가 심하다)