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에서는 running을 false로 바꾼다.
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안에for와if가 있으며, 둘 다 출력 결과를 바꾼다. - [ ] 테스트 표 6개를 모두 실행했다.