사용자에게 글 번호를 입력받아 해당하는 번호의 게시물에 좋아요를 설정/해제하는 프로그램을 구현하세요
요구사항
- 사용자에게 글 번호를 입력받는다
- 글 번호를 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로 복사 (비추천 - 메모리 낭비가 심하다)