質問編集履歴

3

制作途中のソースコードの改善追記

2018/06/20 16:13

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -290,6 +290,286 @@
290
290
 
291
291
 
292
292
 
293
+ ### 作成途中のソースコード(追記 2018.6.21)
294
+
295
+
296
+
297
+ ```Java
298
+
299
+
300
+
301
+ import java.io.IOException;
302
+
303
+ import java.util.Arrays;
304
+
305
+ import java.util.LinkedList;
306
+
307
+ import java.util.List;
308
+
309
+ import java.util.Scanner;
310
+
311
+
312
+
313
+ public class Tokubetsu5 {
314
+
315
+
316
+
317
+ public static final String[] NUM_ARRAY = {"0","1", "2", "3", "4", "5", "6", "7", "8", "9"};
318
+
319
+
320
+
321
+ public static final int MAX_LENGTH = 4;
322
+
323
+
324
+
325
+ public static void main(String[] args) throws IOException{
326
+
327
+ Tokubetsu5 hb = new Tokubetsu5();
328
+
329
+ hb.execute();
330
+
331
+ }
332
+
333
+
334
+
335
+ private void execute() throws IOException{
336
+
337
+
338
+
339
+ String[] cpuNumArray = CpuNumArray();
340
+
341
+
342
+
343
+ boolean clear = false;
344
+
345
+ try(Scanner sc = new Scanner(System.in)){
346
+
347
+
348
+
349
+ //攻略できるまでループ
350
+
351
+ while(!clear){
352
+
353
+
354
+
355
+ String[] playerNumArray = PlayerNum(sc);
356
+
357
+
358
+
359
+ clear = checkHitAndBlow(cpuNumArray, playerNumArray);
360
+
361
+
362
+
363
+ }
364
+
365
+ }
366
+
367
+ System.out.println("正解です");
368
+
369
+ System.out.println("終了します");
370
+
371
+
372
+
373
+ }
374
+
375
+
376
+
377
+
378
+
379
+ private String[] CpuNumArray(){
380
+
381
+ //数字の列を作成
382
+
383
+ List<String> tempList = new LinkedList<String>(Arrays.asList(NUM_ARRAY));
384
+
385
+
386
+
387
+ String[] CpuNum = new String[4];
388
+
389
+
390
+
391
+ //1回繰り返し、数字をランダムで取得
392
+
393
+ for(int i = 1; i < 2; i++){
394
+
395
+ int num = (int)(Math.floor(Math.random() * (10-i)));
396
+
397
+ //一度使用した数字はリストから削除
398
+
399
+
400
+
401
+ CpuNum[i] = tempList.remove(num);
402
+
403
+
404
+
405
+ //解答確認用
406
+
407
+ System.out.println(CpuNum[i]);
408
+
409
+
410
+
411
+ //3回繰り返し、数字をランダムで取得
412
+
413
+ for(int j = 1; j < 4; j++){
414
+
415
+ int num2 = (int)(Math.floor(Math.random() * (10-j)));
416
+
417
+ //一度使用した数字はリストから削除
418
+
419
+
420
+
421
+ CpuNum[j] = tempList.remove(num2);
422
+
423
+
424
+
425
+ //解答確認用
426
+
427
+ System.out.println(CpuNum[j]);
428
+
429
+ }
430
+
431
+ }
432
+
433
+
434
+
435
+ return CpuNum;
436
+
437
+
438
+
439
+ }
440
+
441
+
442
+
443
+ private String[] PlayerNum(Scanner sc) throws IOException{
444
+
445
+
446
+
447
+ boolean Check = false;
448
+
449
+ String line = null;
450
+
451
+
452
+
453
+ //入力OKになるまで繰り返し
454
+
455
+ check:
456
+
457
+ while(!Check){
458
+
459
+
460
+
461
+ System.out.println("4桁の数字を入力してください。");
462
+
463
+ line = sc.nextLine();
464
+
465
+
466
+
467
+ //文字数チェック
468
+
469
+ if(line.length() > MAX_LENGTH){
470
+
471
+ System.out.println("入力した桁数が多いです");
472
+
473
+ continue;
474
+
475
+ }else if(line.length() < MAX_LENGTH){
476
+
477
+ System.out.println("入力した桁数が少ないです");
478
+
479
+ continue;
480
+
481
+ }
482
+
483
+
484
+
485
+ Check = true;
486
+
487
+
488
+
489
+ }
490
+
491
+
492
+
493
+ return line.split("");
494
+
495
+ }
496
+
497
+
498
+
499
+ private boolean checkHitAndBlow(String[] cpuNumArray, String[] playerNumArray){
500
+
501
+
502
+
503
+ int hitCount = 0;
504
+
505
+ int blowCount = 0;
506
+
507
+
508
+
509
+ //数字のチェック
510
+
511
+ for(int i = 0; i < MAX_LENGTH; i++){
512
+
513
+ for(int j = 0; j < MAX_LENGTH; j++){
514
+
515
+ if(playerNumArray[i].equals(cpuNumArray[j])){
516
+
517
+ blowCount++;
518
+
519
+
520
+
521
+ }
522
+
523
+
524
+
525
+ }
526
+
527
+ break;
528
+
529
+ }
530
+
531
+
532
+
533
+ for(int i = 0; i < MAX_LENGTH; i++){
534
+
535
+ if(playerNumArray[i].equals(cpuNumArray[i])){
536
+
537
+ blowCount--;
538
+
539
+ hitCount++;
540
+
541
+
542
+
543
+ }
544
+
545
+ }
546
+
547
+
548
+
549
+ System.out.println(hitCount + " Hit " + blowCount + "Blow");
550
+
551
+
552
+
553
+ if(hitCount == MAX_LENGTH){
554
+
555
+ return true;
556
+
557
+ }
558
+
559
+ return false;
560
+
561
+ }
562
+
563
+ }
564
+
565
+
566
+
567
+
568
+
569
+ ```
570
+
571
+
572
+
293
573
  ### やりたいこと
294
574
 
295
575
  現状のコードでHit&Blowはプレイすることが可能ではありますが、

2

修正

2018/06/20 16:13

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  4桁の数字の先頭を0から始めてはならない。
38
38
 
39
- 3466など、入力値は重複させないようにすること。( 0blowと表示させること )
39
+ 3366など、入力値は重複させないようにすること。( 0blowと表示させること )
40
40
 
41
41
 
42
42
 
@@ -204,63 +204,61 @@
204
204
 
205
205
  }
206
206
 
207
- /*
207
+
208
-
209
- //入力値が重複していないかチェック
208
+
210
-
211
- for(int i = 0; i < MAX_LENGTH - 1; i++){
209
+
212
-
213
- String lineSub = line.substring(i+1);
210
+
214
-
215
- if(lineSub.indexOf(line.substring(i, i+1)) != -1){
216
-
217
- System.out.println("入力した数値が重複しています");
218
-
219
- continue check;
211
+ Check = true;
220
-
212
+
213
+
214
+
221
- }
215
+ }
216
+
217
+
218
+
219
+ return line.split("");
220
+
221
+ }
222
+
223
+
224
+
225
+
226
+
227
+ private boolean checkHitAndBlow(String[] cpuNumArray, String[] playerNumArray){
228
+
229
+
230
+
231
+ int hitCount = 0;
232
+
233
+ int blowCount = 0;
234
+
235
+
236
+
237
+ //数字のチェック
238
+
239
+ for(int i = 0; i < MAX_LENGTH; i++){
240
+
241
+ for(int j = 0; j < MAX_LENGTH; j++){
242
+
243
+ if(playerNumArray[i].equals(cpuNumArray[j])){
244
+
245
+ blowCount++;
222
246
 
223
247
  }
224
248
 
225
- */
226
-
227
-
228
-
229
- Check = true;
230
-
231
-
232
-
233
249
  }
234
250
 
235
-
236
-
237
- return line.split("");
238
-
239
- }
251
+ }
240
-
241
-
242
-
243
- private boolean checkHitAndBlow(String[] cpuNumArray, String[] playerNumArray){
252
+
244
-
245
-
246
-
247
- int hitCount = 0;
253
+
248
-
249
- int blowCount = 0;
250
-
251
-
252
-
253
- //数字のチェック
254
254
 
255
255
  for(int i = 0; i < MAX_LENGTH; i++){
256
256
 
257
- for(int j = 0; j < MAX_LENGTH; j++){
258
-
259
- if(playerNumArray[i].equals(cpuNumArray[j])){
257
+ if(playerNumArray[i].equals(cpuNumArray[i])){
260
-
258
+
261
- blowCount++;
259
+ blowCount--;
262
-
260
+
263
- }
261
+ hitCount++;
264
262
 
265
263
  }
266
264
 
@@ -268,20 +266,6 @@
268
266
 
269
267
 
270
268
 
271
- for(int i = 0; i < MAX_LENGTH; i++){
272
-
273
- if(playerNumArray[i].equals(cpuNumArray[i])){
274
-
275
- blowCount--;
276
-
277
- hitCount++;
278
-
279
- }
280
-
281
- }
282
-
283
-
284
-
285
269
  System.out.println(hitCount + " Hit " + blowCount + "Blow");
286
270
 
287
271
 
@@ -334,7 +318,7 @@
334
318
 
335
319
 
336
320
 
337
- という表示をさせたいのですが、自力では閃かず、お力をお借りしたく存じます。
321
+ という表示をさせたいのですが、自力では閃かず、お力をお借りしたく思います。
338
322
 
339
323
  また、現状では先頭0始まり( 例: 0123 )の表示も通ってしまうため、
340
324
 

1

問題文の追加

2018/06/17 17:07

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  「4桁の数字の先頭を0から始めてはならない」
10
10
 
11
- 「入力値重複した場合、重複した数値は出さないようにすること。(0blowと表示)」
11
+ 「入力値重複さないようにすること。(0blowと表示)」
12
12
 
13
13
  という部分がどうしてもできず、困っております。
14
14
 
@@ -18,6 +18,28 @@
18
18
 
19
19
 
20
20
 
21
+ ### 問題文
22
+
23
+
24
+
25
+ javaを用いてHit&Blowを作成しなさい。また、以下の条件を踏まえることとする。
26
+
27
+
28
+
29
+ 条件:
30
+
31
+ 4桁の数字を探すゲームであること。
32
+
33
+ 4桁の数字が正解するまで再入力させること。
34
+
35
+ 答えの数は乱数を用いること。
36
+
37
+ 4桁の数字の先頭を0から始めてはならない。
38
+
39
+ 3466など、入力値は重複させないようにすること。( 0blowと表示させること )
40
+
41
+
42
+
21
43
 
22
44
 
23
45