-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOpenHashTester.java
More file actions
128 lines (108 loc) · 2.84 KB
/
OpenHashTester.java
File metadata and controls
128 lines (108 loc) · 2.84 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
124
125
126
127
128
package hash;
import java.util.Scanner;
// 오픈 주소법을 사용한 프로그램
public class OpenHashTester {
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);
}
@SuppressWarnings("incomplete-switch")
public static void main(String[] args) {
Menu menu; // 메뉴
Data data; // 추가용 데이터 참조
Data temp = new Data(); // 입력용 데이터
OpenHash<Integer, Data> hash = new OpenHash<>(13);
do {
switch(menu = SelectMenu()) {
case ADD :
data = new Data();
data.scanData("추가", Data.NO | Data.NAME);
int k = hash.add(data.keyCode(), data);
switch(k) {
case 1 :
System.out.println("그 키 값은 이미 등록되어 있습니다.");
break;
case 2 :
System.out.println("해시 테이블이 가득 찼습니다.");
break;
}
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);
}
}