로드 중...
검색 중...
일치하는 항목 없음
DomainCheck.java
1패키지com.슬롯 게임examples.domain;
2
3가져오기java.io.파일;
4가져오기java.util.Arrays;
5가져오기java.util.HashMap;
6가져오기java.util.List;
7가져오기java.util.Map;
8가져오기java.util.Vector;
9
13가져오기 com.감스.API.GAMSJob;
15가져오기 com.게임.API.GAMSSet;
16가져오기 com.게임.API.GAMSSetRecord;
19가져오기 com.게임.API.GAMSWorkspaceInfo;
20
36공개 클래스도메인체크{
37
38 공개 정적 무효메인(문자열[] 인수)
39 // 명령줄 인수에서 작업공간 정보 확인
41 if(args.length > 0)
42wsInfo.setSystemDirectory( 인수[0] );
43 // 디렉토리 생성
44파일 WorkingDirectory =신규파일(System.getProperty("user.dir"), "도메인검사");
45workingDirectory.mkdir();
46wsInfo.setWorkingDirectory(workingDirectory.getAbsolutePath());
47 // 작업공간 생성
49
50 // C# 데이터 구조를 사용하여 일부 데이터 정의
51List<String> 식물 = Arrays.asList("시애틀", "샌디에이고");
52List<String> 시장 = Arrays.asList("뉴욕", "시카고", "토피카");
53Map<String, Double> 용량 =신규HashMap<String, Double>();
54{
55용량.put("시애틀", Double.valueOf(350.0));
56용량.put("샌디에이고", Double.valueOf(600.0));
57}
58Map<String, Double> 수요 =신규HashMap<String, Double>();
59{
60수요.put("뉴욕", Double.valueOf(325.0));
61수요.put("시카고", Double.valueOf(300.0));
62수요.put("토피카", Double.valueOf(275.0));
63}
64
65지도<벡터<문자열>, 이중> 거리 =신규HashMap<Vector<String>, Double>();
66{
67거리.put(신규Vector<String>( Arrays.asList(신규문자열[]"시애틀", "뉴욕") ), Double.valueOf(2.5));
68거리.put(신규Vector<String>( Arrays.asList(신규문자열[]"시애틀", "시카고") ), Double.valueOf(1.7));
69거리.put(신규Vector<String>( Arrays.asList(신규문자열[]"시애틀", "토피카") ), Double.valueOf(1.8));
70거리.put(신규Vector<String>( Arrays.asList(신규문자열[]"샌디에고", "뉴욕") ), Double.valueOf(2.5));
71거리.put(신규Vector<String>( Arrays.asList(신규문자열[]"샌디에고", "시카고") ), Double.valueOf(1.8));
72거리.put(신규Vector<String>( Arrays.asList(신규문자열[]"샌디에고", "토피카") ), Double.valueOf(1.4));
73}
74
75 // C# 데이터 구조의 데이터로 GAMSDatabase 준비
77
78 // GAMSDatabase에 두 세트 추가
79 GAMSSeti = db.추가세트("나", "");
80 for(문자열 p : 식물)
81i.addRecord(p);
82 GAMSSetj = DB.추가세트("j", "");
83 for(문자열 m : 시장)
84j.addRecord(m);
85
86 // 도메인 정보가 포함된 매개변수 추가
87 슬롯 게임매개변수a = DB.addParameter("a", "공장의 생산 능력", i);
88 for(문자열 p : 식물)
89a.addRecord(p).setValue(capacity.get(p).doubleValue() );
90 // 도메인 위반이 발견되면 문제가 발생한 것입니다.
91 if(!a.checkDomains())
92{
93System.out.println("***중단*** 다음에서 예기치 않은 도메인 위반이 발생했습니다.");
94System.exit(1);
95}
96 // 완화된 도메인 정보로 매개변수 추가
97 슬롯 게임매개변수b = DB.addParameter("b", "경우에 따라 시장 j의 수요", "j");
98 for(문자열 m : 시장)
99b.addRecord(m).setValue(demand.get(m).doubleValue());
100
101 // 도메인 위반이 발견되면 뭔가 잘못되었습니다.
102 if(!b.checkDomains())
103System.out.println("***중단*** b에서 예기치 않은 도메인 위반");
104System.exit(1);
105}
106
107 // 도메인 정보가 포함된 2차원 매개변수 추가
108객체[] 도메인 =신규객체[] i, j ;
109 슬롯 게임매개변수d = db.addParameter("d", "수천 마일 단위의 거리", 도메인);
110 for(Vector<String> t : distance.keySet())
111문자열[] 키 =신규문자열[t.size()];
112t.toArray(키);
113d.addRecord( 키 ).setValue( 거리.get(t).doubleValue() ) ;
114}
115
116 // 도메인 위반이 발견되면 뭔가 잘못되었습니다.
117 if(!d.checkDomains())
118System.out.println("***중단*** d에서 예기치 않은 도메인 위반");
119System.exit(1);
120}
121
122 // 데이터베이스에서 도메인 위반이 발견되면 문제가 발생한 것입니다.
123 if(!db.checkDomains()) {
124System.out.println("***중단*** DB에서 예기치 않은 도메인 위반");
125System.exit(1);
126}
127
128 // "잘못된" 항목 생성
129d.addRecord(신규문자열[]"시애틀", "아아").setValue( 1 );
130d.addRecord(신규문자열[]"bb", "시애틀").setValue( 1 );
131
132a.addRecord("아아").setValue( 1 );
133a.addRecord("bb").setValue( 1 );
134b.addRecord("아아").setValue( 1 );
135b.addRecord("bb").setValue( 1 );
136
137 // 이제 슬롯 게임 데이터베이스와 기호 a 및 d에 도메인 위반이 있어야 합니다.
138 if(db.checkDomains()) {
139System.out.println("***중단*** db에 대한 도메인 위반이 인식되지 않음");
140System.exit(1);
141}
142 if(a.checkDomains())
143System.out.println("***중단*** 인식되지 않는 도메인 위반");
144System.exit(1);
145}
146
147 if(d.checkDomains())
148System.out.println("***중단*** d에 대한 도메인 위반이 인식되지 않음");
149System.exit(1);
150}
151
152 // 반면에 b는 완화된 도메인 정보로만 정의되었으므로 도메인 위반이 표시되어서는 안 됩니다.
153 if(!b.checkDomains())
154System.out.println("***중단*** b에서 예기치 않은 도메인 위반");
155System.exit(1);
156}
157
158 // a의 경우 2개의 도메인 위반("aa" 및 "bb")이 표시되어야 합니다.
159 intdvCnt = 0;
160System.out.println("다음의 기호 도메인 위반:");
161 for(GAMSSymbolDomainViolation항목 : a.getSymbolDomainViolations(0))
162System.out.print(" > [");
163 for(부울item1 : item.getViolationArray())
164System.out.print(item1 +" ");
165System.out.print("] <> ");
166 for(문자열 item2 : item.getRecord().getKeys())
167System.out.print(item2 +" ");
168System.out.println("<<");
169dvCnt++;
170}
171 if(dvCnt != 2)
172System.out.print("***중단*** a에 대해 3개의 도메인 위반 기록이 예상되었으나 ["이(가) 발견되었습니다.+ dvCnt+"]");
173System.exit(1);
174}
175
176 // d의 경우 3개의 도메인 위반이 표시됩니다("Seattle", *"aa"*; *"bb"*, *"Seattle"*)
177dvCnt = 0;
178System.out.println("d의 기호 도메인 위반:");
179 for(GAMSSymbolDomainViolation항목 : d.getSymbolDomainViolations(0))
180System.out.print(" > [");
181 for(부울item1 : item.getViolationArray())
182System.out.print(item1 +" ");
183 if(항목1)
184dvCnt++;
185}
186System.out.print("] <> ");
187 for(문자열 item2 : item.getRecord().getKeys())
188System.out.print(item2 +" ");
189System.out.println("<<");
190}
191 if(dvCnt != 3)
192System.out.println("***중단*** d에 대해 3개의 도메인 위반 기록이 예상되었으나 발견됨 ["+ dvCnt+"]");
193System.exit(1);
194}
195
196 // db의 경우 5개의 도메인 위반이 표시되어야 합니다(모두 a와 d의 위반)
197dvCnt = 0;
198System.out.println("최대 레코드 수 제한 없이 db의 데이터베이스 도메인 위반:");
200 (GAMSSymbolDomainViolation정보 : item.getSymbolDomainViolations())
201System.out.print(" > "+ item.getSymbol().getName() +": [");
202 for(부울요소 : info.getViolationArray())
203System.out.print(요소 +" ");
204 if(요소)
205dvCnt++;
206}
207System.out.print("] <> ");
208 (문자열 키 : info.getRecord().getKeys())
209System.out.print(키 +" ");
210System.out.println(" <<");
211}
212}
213 if(dvCnt != 5)
214System.out.println("***중단*** DB에 5개의 도메인 위반 기록이 예상되었으나 발견됨 ["+ dvCnt+"]");
215System.exit(1);
216}
217
218 // 이제 보고된 위반 기록의 양을 총 3개로 제한합니다.
219dvCnt = 0;
220System.out.println("3개 이하의 위반 기록이 있는 db의 데이터베이스 도메인 위반:");
222 for(GAMSSymbolDomainViolation정보: item.getSymbolDomainViolations())
223System.out.print(" > "+ item.getSymbol().getName() +": [");
224 for(부울요소 : info.getViolationArray())
225System.out.print(요소 +" ");
226 if(요소)
227dvCnt++;
228}
229System.out.print("] <> ");
230 (문자열 키 : info.getRecord().getKeys())
231System.out.print(키 +" ");
232System.out.println(" <<");
233}
234}
235 if(dvCnt != 3)
236System.out.println("***중단*** DB에 3개의 도메인 위반 기록이 예상되었으나 발견됨 ["+ dvCnt+"]");
237System.exit(1);
238}
239
240 // 이제 보고되는 위반 기록의 양을 기호당 1개로 제한합니다.
241dvCnt = 0;
242System.out.println("1 기호당 1개 이하의 위반 기록이 있는 db의 데이터베이스 도메인 위반:");
244 for(GAMSSymbolDomainViolation정보: item.getSymbolDomainViolations())
245System.out.print(" > "+ item.getSymbol().getName() +": [");
246 for(부울요소 : info.getViolationArray())
247System.out.print(요소 +" ");
248}
249System.out.print("] <> ");
250 for(문자열 키 : info.getRecord().getKeys())
251System.out.print(키 +" ");
252System.out.println(" <<");
253}
254dvCnt++;
255}
256 if(dvCnt != 2)
257System.out.println("***중단*** a에 대해 2개의 도메인 위반 기록이 예상되었으나 ["이(가) 발견되었습니다.+ dvCnt+"]");
258System.exit(1);
259}
260
261 // 기본적으로 도메인 위반이 있는 GAMSDatabase를 내보낼 때 예외가 발생해야 합니다.
262 부울sawException =거짓;
263 시도해 보세요{
264db.내보내기("test.gdx");
265}잡기(예외 e)
266sawException =;
268db.내보내기("test.gdx");
269}
270 if(!sawException)
271System.out.println("***중단*** 기본적으로 도메인 위반이 포함된 슬롯 게임데이터베이스를 내보낼 수 없어야 합니다.");
272System.exit(1);
273}
274
275 // gdx에서 도메인 정보가 포함된 매개변수 읽기
278
279 // 매개변수의 도메인은 GAMSSet i 및 GAMSSet j여야 합니다.
280 (객체 항목 : d2.getDomains())
281 if(항목 인스턴스GAMSSet) {
282 if (((GAMSSet)item).getName().equals("나")) {
283 for(GAMSSetRecord우엘 : (GAMSSet)항목)
284 if(!plants.contains(uel.getKey(0)))
285System.out.println("***중단*** 예상치 못한 uel "+ uel.getKey(0) +" 도메인 i에서 발견됨");
286System.exit(1);
287}
288}
289 그밖에 if (((GAMSSet)item).getName().equals("j")) {
290 for(GAMSSetRecord우엘 : (GAMSSet)항목)
291 if(!markets.contains(uel.getKey(0)))
292System.out.println("***중단*** 예상치 못한 uel "+ uel.getKey(0) +" 도메인 j에서 발견됨");
293System.exit(1);
294}
295}
296 그밖에
297{
298System.out.println("***중단*** GAMSSet i 및 j가 필요했지만 발견됨"+ ((GAMSSet)item).getName());
299System.exit(1);
300}
301}
302 그밖에
303{
304System.out.println("***중단*** GAMSSet을 도메인으로 예상했지만 완화된 도메인을 찾았습니다. "+ (문자열)항목);
305System.exit(1);
306}
307}
308
309 /* *************************************************************** *
310* 이 다음 섹션은 실제로 도메인 확인에 관한 것이 아니지만 우리는 *
311* 특정 작업이 예상대로 작동하는지 확인하세요. *
312 * *************************************************************** */
313
314 // 별칭을 세트로 읽어보세요
315 GAMSJobaliasJob = ws.addJobFromString(aliasData);
316aliasJob.실행();
317 GAMSSetii = aliasJob.아웃DB().getSet("ii");
318System.out.println("별칭 집합의 요소:");
319 for(GAMSSetRecord항목 : ii)
320System.out.println(" > "+ item.getKey(0));
321
323 GAMSSettestSet = 테스트DB.추가세트("테스트", 1);
324
325 // 빈 UEL을 추가해 보세요
326testSet.addRecord("");
327System.out.println("빈 UEL을 추가한 후 테스트 세트의 요소:");
328System.out.println(" > "+ testSet.getNumberOfRecords());
329
330 // 슬롯 게임는 선행 공백이 관련되어 있는 동안 보류 중인 공백을 제거합니다.
331testSet.addRecord(" a ").setText("a");
332System.out.println("' a ' 레코드는 ' a'와 동일해야 합니다:");
333System.out.println(" > "+ testSet.findRecord("a").getText());
334
335 // 슬롯 게임는 63자를 초과하는 UEL을 처리할 수 없습니다.
336 // 괜찮을 것 같아요 ...
337testSet.addRecord("123456789012345678901234567890123456789012345678901234567890123").setText("알았어");
338 // ... 하지만 이건 아님
339 시도{
340testSet.addRecord("1234567890123456789012345678901234567890123456789012345678901234").setText("괜찮지 않음");
341System.out.println("*** 63자를 초과하는 레코드를 추가하는 것은 불가능해야 합니다.");
342System.exit(1);
343}잡기(슬롯 게임예외e)
344
345 // 슬롯 게임는 255자를 초과하는 설명 텍스트를 처리할 수 없습니다.
346테스트DB.추가세트("텍스트 확인", "12345678901234567890123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789012345678901 23456789012345678901234567890123456789012345678901234567890123456789 012345678901234567890123456789012345678901234567890123456789012345");
347 시도해 보세요{
348테스트DB.추가세트("textNotOK", "123456789012345678901234567890123456789012345678901234 56789012345678901234567890123456789012345678901234567890123456789012 34567890123456789012345678901234567890123456789012345678901234567890 123456789012345678901234567890123456789012345678901234567890123456");
349System.out.println("*** 255자를 초과하는 설명 텍스트를 추가하는 것은 불가능해야 합니다.");
350System.exit(1);
351}잡기(슬롯 게임예외e)
352
353testSet.addRecord("알았어").setText("12345678901234567890123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789012345678901 23456789012345678901234567890123456789012345678901234567890123456789 012345678901234567890123456789012345678901234567890123456789012345");
354 시도{
355testSet.addRecord("안돼").setText("123456789012345678901234567890123456789012345678901234 56789012345678901234567890123456789012345678901234567890123456789012 34567890123456789012345678901234567890123456789012345678901234567890 123456789012345678901234567890123456789012345678901234567890123456");
356System.out.println("*** 255자를 초과하는 설명 텍스트를 추가하는 것은 불가능해야 합니다.");
357System.exit(1);
358}잡다(슬롯 게임예외e)
359
360 // 슬롯 게임는 작은따옴표와 큰따옴표가 포함된 UEL을 처리할 수 있지만 동시에 처리할 수는 없습니다.
361testSet.addRecord("인용문'");
362testSet.addRecord("인용문\"");
363 시도{
364testSet.addRecord("인용문'\"");
365System.out.println("*** 레코드에 작은따옴표와 큰따옴표를 추가하는 것은 불가능해야 합니다.");
366System.exit(1);
367}잡기(슬롯 게임예외e)
368
369테스트DB.내보내기("test.gdx");
370
371System.out.println("성공적으로 종료되었습니다!");
372System.exit(0);
373}
374
375 정적문자열 aliasData =
376 "세트 \n"+
377 " 나는 식물 통조림 / 시애틀, 샌디에고 /; \n"+
378 " \n"+
379 "별칭 (i,ii); \n";
380
381}
GAMSParameter getParameter(문자열 식별자)
GAMSSet addSet(문자열 식별자, 정수 차원)
GAMSParameter addParameter(문자열 식별자, 정수 차원)
목록< GAMSDatabaseDomainViolation > getDatabaseDomainViolations(int maxViolation, int maxViolationPerSymbol)
GAMSSet getSet(문자열 식별자)
슬롯 게임데이터베이스 OutDB()
void setSystemDirectory(문자열 디렉터리)
void setWorkingDirectory(문자열 디렉터리)
GAMSDatabase addDatabaseFromGDX(String gdxFileName)
GAMSJob addJobFromString(문자열 소스)
이 예는 슬롯 게임 용어에서 도메인 검사라고도 알려진 참조 무결성을 시행합니다.