콘텐츠로 이동

Java 미니 프로젝트 - Priority Word Finder

목적: SAT Collocation Manager를 만들기 전에 Java 콘솔, ArrayList, method, 조건문, 반복문을 한 번에 연습한다.
권장 시간: 60-90분
결과물: Main.java 한 파일

완성할 프로그램

사용자는 메뉴에서 우선순위를 입력해 단어를 보거나, 영단어를 검색할 수 있다.

=== Priority Word Finder ===
1. Show words by priority
2. Search for a word
3. Exit
Choose: 1
Priority (1-3): 3

ascertain - 확인하다
precision - 정밀성

이 과제는 최종 Create Task가 아니다. 최종 프로젝트에서 쓸 핵심 구조를 작게 연습하는 용도다.

요구사항

ID 구현할 내용 확인 방법
R1 Scanner로 menu 번호를 입력받는다. 1, 2, 3 중 하나를 입력할 수 있다.
R2 ArrayList<WordCard>에 카드 4개 이상을 저장한다. 카드마다 word, meaning, priority가 있다.
R3 메뉴 1은 선택한 priority의 모든 카드를 출력한다. priority 3 입력 시 해당 카드 2개 이상이 출력된다.
R4 메뉴 2는 입력한 word를 대소문자와 무관하게 찾는다. ASCERTAIN도 찾는다.
R5 없는 단어는 오류 없이 안내한다. planet 입력 시 “Not found”가 출력된다.
R6 메뉴 3은 프로그램을 종료한다. goodbye 메시지 후 종료된다.

사용할 데이터

아래 데이터만 먼저 입력한다. 데이터가 적어도 ArrayList가 여러 원소를 관리한다는 점을 확인할 수 있다.

word meaning priority
ascertain 확인하다 3
precision 정밀성 3
catalyst 촉매, 계기 2
refine 다듬다, 개선하다 2
staple 주요한, 주식의 1

구현 순서

1. WordCard class 만들기 - 15분

WordCard에는 아래 필드를 만든다.

String word;
String meaning;
int priority;

세 값을 모두 받는 constructor를 작성한다. getter/setter는 이번 과제에서 필요 없다.

2. deck 만들기 - 10분

main에서 다음처럼 시작한다.

Scanner scanner = new Scanner(System.in);
ArrayList<WordCard> deck = new ArrayList<WordCard>();

// TODO: 위 표의 WordCard 5개를 deck에 add한다.

중간 점검: System.out.println(deck.size());5를 출력하는지 확인한 뒤에는 이 출력문을 지운다.

3. 메뉴 반복 만들기 - 15분

boolean running = true;를 만들고 while (running) 안에서 메뉴를 출력한다.

1. Show words by priority
2. Search for a word
3. Exit

if / else if / else 또는 switch로 메뉴를 나눈다. 1과 2는 아직 “Coming soon”만 출력해도 되고, 3에서는 runningfalse로 바꾼다.

4. 핵심 method: showByPriority - 20분

아래 method header를 사용한다. 이 method는 parameter를 실제로 사용해야 한다.

public static void showByPriority(ArrayList<WordCard> deck, int selectedPriority) {
    // TODO 1: 카드가 몇 개 출력되었는지 세는 변수 만들기
    // TODO 2: for문으로 deck의 모든 WordCard를 순회하기
    // TODO 3: card.priority == selectedPriority일 때 word와 meaning 출력하기
    // TODO 4: 하나도 없으면 안내 메시지 출력하기
}

메뉴 1에서 priority를 입력받아 이 method를 호출한다.

이 method에는 다음 세 알고리즘 요소가 모두 있다.

Sequencing: priority 입력 → method 호출 → 결과 출력
Iteration:  deck의 카드를 for문으로 하나씩 확인
Selection:  card.priority가 selectedPriority와 같은지 판단

5. searchWord 만들기 - 15분

아래 method header를 사용한다.

public static void searchWord(ArrayList<WordCard> deck, String query) {
    // TODO: for문으로 deck을 순회한다.
    // TODO: equalsIgnoreCase로 word와 query를 비교한다.
    // TODO: 찾으면 뜻과 priority를 출력하고 method를 끝낸다.
    // TODO: 끝까지 못 찾으면 Not found를 출력한다.
}

메뉴 2에서 단어를 입력받아 searchWord(deck, query)를 호출한다.

테스트 표

코드를 작성한 뒤 예상 결과를 먼저 읽고 실행한다.

# 입력 예상 결과
1 menu 1, priority 3 ascertain과 precision이 출력된다.
2 menu 1, priority 1 staple이 출력된다.
3 menu 2, ascertain 확인하다, priority 3이 출력된다.
4 menu 2, ASCERTAIN #3과 같은 카드가 출력된다.
5 menu 2, planet Not found가 출력되고 프로그램은 계속된다.
6 menu 3 goodbye 메시지 후 종료된다.

완료 체크

  • [ ] javac Main.java이 오류 없이 끝난다.
  • [ ] java Main으로 메뉴가 반복해서 보인다.
  • [ ] 하나의 ArrayList를 목록 보기와 검색이 함께 사용한다.
  • [ ] showByPriority는 두 parameter가 결과에 영향을 준다.
  • [ ] showByPriority 안에 forif가 있으며, 둘 다 출력 결과를 바꾼다.
  • [ ] 테스트 표 6개를 모두 실행했다.