-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathChainHashTester.java
More file actions
123 lines (102 loc) · 2.72 KB
/
ChainHashTester.java
File metadata and controls
123 lines (102 loc) · 2.72 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package hash;
// 클래스 ChainHash<K,V>를 사용한 프로그램
import java.util.Scanner;
// 체인법에 의한 해시의 사용 예제
public class ChainHashTester {
static Scanner stdIn = new Scanner(System.in);
// 데이터(회원번호 + 이름)
static class Data {
static final int NO = 1; // 번호를 입력 받습니까?
static final int NAME = 2; // 이름을 입력 받습니까?
private Integer no;
private String name;
// 키 값
Integer keyCode() {
return no;
}
// 문자열을 반환합니다
public String toString() {
return name;
}
// 데이터를 입력합니다.
void scanData(String guide, int sw) {
System.out.println(guide + "할 데이터를 입력하세요.");
if((sw & NO) == NO) {
System.out.print("번호 : ");
no = stdIn.nextInt();
}
if((sw & NAME) == NAME) {
System.out.print("이름 : ");
name = stdIn.next();
}
}
}
// 메뉴 열거형
enum Menu {
ADD("추가"),
REMOVE("삭제"),
SEARCH("검색"),
DUMP("표시"),
TERMINATE("종료");
private final String message; // 출력할 문자열
static Menu MenuAt(int idx) { // 서수가 idx인 열거를 반환
for(Menu m : Menu.values()) {
if(m.ordinal() == idx) {
return m;
}
}
return null;
}
Menu(String string) { // 생성자
message = string;
}
String getMessage() { // 출력할 문자열을 반환
return message;
}
}
// 메뉴 선택
static Menu SelectMenu() {
int key;
do {
for(Menu m : Menu.values()) {
System.out.printf("(%d)%s ", m.ordinal(), m.getMessage());
}
System.out.print(" : ");
key = stdIn.nextInt();
} while(key < Menu.ADD.ordinal() || key > Menu.TERMINATE.ordinal());
return Menu.MenuAt(key);
}
// Main Test 실행 메소드
@SuppressWarnings("incomplete-switch")
public static void main(String[] args) {
Menu menu; // 메뉴
Data data; // 추가용 데이터 참조
Data temp = new Data(); // 입력용 데이터
ChainHash<Integer, Data> hash = new ChainHash<>(13);
do {
switch(menu = SelectMenu()) {
case ADD : // 추가
data = new Data();
data.scanData("추가", Data.NO | Data.NAME);
hash.add(data.keyCode(), data);
break;
case REMOVE : // 삭제
temp.scanData("삭제", Data.NO);
hash.remove(temp.keyCode());
break;
case SEARCH : // 검색
temp.scanData("검색", Data.NO);
Data t = hash.search(temp.keyCode());
if(t != null) {
System.out.println("그 키를 갖는 데이터는 " + t + "입니다.");
} else {
System.out.println("그 데이터가 없습니다.");
}
break;
case DUMP :
hash.dump();
break;
}
} while(menu != Menu.TERMINATE);
}
}