回答編集履歴

1

説明の訂正

2018/04/21 08:16

投稿

退会済みユーザー
test CHANGED
@@ -38,287 +38,311 @@
38
38
 
39
39
 
40
40
 
41
+ ### 説明の訂正
42
+
41
- いか、私が書いたソスコードを載せおきます
43
+ ブラックジャックで「最初にplayerはカードを2枚ずつ引く」ところを忘れてました。みません
44
+
42
-
45
+ その部分を追加しました。
43
-
44
46
 
45
47
  ```Java
46
48
 
47
49
  import java.util.Scanner;
48
50
 
51
+ import java.util.Random;
52
+
49
53
  import java.util.ArrayList;
50
54
 
51
- import java.util.Random;
55
+
52
-
53
-
54
-
56
+
55
- public class Main{
57
+ public class Sum {
56
-
57
-
58
-
58
+
59
+
60
+
59
- public static void main(String[] args) {
61
+ public static void main(String[] args){
62
+
63
+
64
+
65
+ Random rand = new Random();
66
+
67
+
68
+
69
+ int loop = 0;
70
+
71
+
72
+
73
+ int []card = new int[13];
60
74
 
61
75
 
62
76
 
77
+ for(int i = 0; i < card.length; i++){
78
+
79
+ card[i] = 4;
80
+
81
+ }
82
+
83
+
84
+
63
85
  Scanner sc = new Scanner(System.in);
64
86
 
65
- Random rand = new Random();
66
-
67
- ArrayList<Integer> your_card = new ArrayList<>();
87
+ ArrayList<Integer> your_list = new ArrayList<>();
68
-
88
+
69
- ArrayList<Integer> pc_card = new ArrayList<>();
89
+ ArrayList<Integer> cpu_list = new ArrayList<>();
90
+
91
+
92
+
70
-
93
+ int your_sum1= 0;
94
+
71
- int []card = new int[13];
95
+ int your_sum2 = 0;
96
+
97
+ int cpu_sum1 = 0;
98
+
99
+ int cpu_sum2 = 0;
72
100
 
73
101
 
74
102
 
75
- for(int i = 0; i < 13; i++){
76
-
77
- card[i] = 4; //カードはエースからKまで4枚ずつ
78
-
79
- }
80
-
81
- int you = rand.nextInt(1000);
82
-
83
- int pc = rand.nextInt(1000);
84
-
85
- int loop;
86
-
87
- if(you >= pc){
88
-
89
- System.out.println("あなたが先攻です。");
90
-
91
- loop = 0;
103
+ int card_number;
104
+
105
+ for(int i = 0; i < 4; i++){
106
+
107
+ do{
108
+
109
+ card_number = rand.nextInt(13);
110
+
111
+ }while(card[card_number] == 0);
112
+
113
+ if(i % 2 == 0){
114
+
115
+ your_list.add(card_number + 1);
116
+
117
+ card[card_number]--;
118
+
119
+ }
120
+
121
+ else{
122
+
123
+ cpu_list.add(card_number + 1);
124
+
125
+ card[card_number]--;
126
+
127
+ }
128
+
129
+ loop++;
130
+
131
+ }
132
+
133
+
134
+
135
+ int your_stop = 0; //引くのをやめるとき1になる
136
+
137
+ int pc_stop = 0;
138
+
139
+ while(true){
140
+
141
+ do{
142
+
143
+ card_number = rand.nextInt(13);
144
+
145
+ }while(card[card_number] == 0);
146
+
147
+
148
+
149
+ if(loop % 2 == 0){
150
+
151
+ System.out.print("あなたが持っているカード:");
152
+
153
+ for(int i = 0; i < your_list.size(); i++){
154
+
155
+ System.out.print(your_list.get(i) + " ");
156
+
157
+ }
158
+
159
+ System.out.println();
160
+
161
+ your_sum1 = sum(1,your_list);
162
+
163
+ your_sum2 = sum(2,your_list);
164
+
165
+ System.out.println("合計値1:" + your_sum1);
166
+
167
+ System.out.println("合計値2:" + your_sum2);
168
+
169
+
170
+
171
+ System.out.print("カードを引きますか? yes -> 0 no - > 1");
172
+
173
+ int your_choice = Integer.parseInt(sc.nextLine());
174
+
175
+ if(your_choice % 2 == 1){
176
+
177
+ your_stop = 1;
178
+
179
+ }
180
+
181
+ else{
182
+
183
+ your_list.add(card_number + 1);
184
+
185
+ card[card_number]--;
186
+
187
+ }
188
+
189
+
190
+
191
+ }
192
+
193
+ else{
194
+
195
+ cpu_sum2 = sum(2,cpu_list);
196
+
197
+ if(cpu_sum2 >= 16){
198
+
199
+ System.out.println("CPUはもうカードを引きません");
200
+
201
+ pc_stop = 1;
202
+
203
+ }
204
+
205
+ else{
206
+
207
+ System.out.println("CPUはカードを引きました。");
208
+
209
+ cpu_list.add(card_number + 1);
210
+
211
+ card[card_number]--;
212
+
213
+ }
214
+
215
+ }
216
+
217
+ if(your_stop == 1 && pc_stop == 1){
218
+
219
+ break;
220
+
221
+ }
222
+
223
+ loop++;
224
+
225
+ }
226
+
227
+
228
+
229
+ for(int i = 0; i < your_list.size(); i++){
230
+
231
+ System.out.print(your_list.get(i) + " ");
232
+
233
+ }
234
+
235
+ System.out.println();
236
+
237
+ for(int i = 0; i < cpu_list.size(); i++){
238
+
239
+ System.out.print(cpu_list.get(i) + " ");
240
+
241
+ }
242
+
243
+ System.out.println();
244
+
245
+ int your_final_sum = your_sum2;
246
+
247
+ int cpu_final_sum = cpu_sum2;
248
+
249
+ if(your_sum2 > 21){
250
+
251
+ your_final_sum = your_sum1;
252
+
253
+ }
254
+
255
+ if(cpu_sum2 > 21){
256
+
257
+ cpu_final_sum = cpu_sum1;
258
+
259
+ }
260
+
261
+ System.out.println("あなたの点数" + your_final_sum);
262
+
263
+ System.out.println("cpuの点数" + cpu_final_sum);
264
+
265
+ String []result = {"勝ちました!!","引き分けです。","負けました...."};
266
+
267
+ if(your_final_sum > 21 && cpu_final_sum > 21 || your_final_sum == cpu_final_sum){
268
+
269
+ System.out.println(result[1]);
270
+
271
+ }
272
+
273
+ else if(your_final_sum > 21){
274
+
275
+ System.out.println(result[2]);
276
+
277
+ }
278
+
279
+ else if(cpu_final_sum > 21){
280
+
281
+ System.out.println(result[0]);
282
+
283
+ }
284
+
285
+ else if(your_final_sum > cpu_final_sum){
286
+
287
+ System.out.println(result[0]);
92
288
 
93
289
  }
94
290
 
95
291
  else{
96
292
 
97
- System.out.println("pcが先攻です。");
293
+ System.out.println(result[2]);
98
-
99
- loop = 1;
294
+
100
-
101
- }
295
+ }
102
-
103
- int tmp;
296
+
104
-
105
- int your_sum = 0;
106
-
107
- int pc_sum = 0;
108
-
109
- int input = 0;
110
-
111
- int your_stop = 0;
112
-
113
- int pc_stop = 0;
114
-
115
- while(your_sum <= 21 && pc_sum <= 21){
116
-
117
- do{
118
-
119
- tmp = rand.nextInt(13) + 1;
120
-
121
- if(tmp >= 10){
122
-
123
- tmp = 10;
124
-
125
- }
297
+ }
298
+
126
-
299
+ public static int sum(int n,ArrayList<Integer> array){ //和
300
+
301
+ //(i)エースを全て1とする
302
+
303
+ //(ii)エースの一つを11とする
304
+
305
+ int sum = 0;
306
+
127
- }while(card[tmp - 1] == 0);
307
+ int count = 0;
308
+
128
-
309
+ for(int i = 0; i < array.size(); i++){
129
-
130
-
131
-
132
-
310
+
133
- if(loop % 2 == 0){
311
+ if(array.get(i) == 1){
134
-
135
- if(your_card.size() > 0){
312
+
136
-
137
- System.out.print("あなたが現在持っているカードは");
138
-
139
- card_list(your_card);
313
+ count++;
140
-
141
- System.out.println("ひきますか? yes -> 偶数 no -> 奇数 を入力");
314
+
142
-
143
- input = Integer.parseInt(sc.nextLine());
144
-
145
- }
315
+ }
146
-
147
- else{
316
+
148
-
149
- input = 0;
150
-
151
- }
152
-
153
-
154
-
155
- if(input % 2 == 0){
317
+ if(array.get(i) < 10){
156
-
318
+
157
- your_card.add(tmp);
319
+ sum += array.get(i);
158
-
159
- your_sum = sum(your_card);
160
-
161
- }
162
-
163
- else{
164
-
165
- your_stop = 1;
166
-
167
- }
168
320
 
169
321
  }
170
322
 
171
323
  else{
172
324
 
173
- pc_card.add(tmp);
174
-
175
- pc_sum = sum(pc_card);
176
-
177
- if(pc_sum > 16){
178
-
179
- pc_stop = 1;
325
+ sum += 10;
180
-
326
+
181
- }
327
+ }
182
-
328
+
183
- }
329
+ }
184
-
330
+
185
- card[tmp - 1]--;
331
+ if(n % 2 == 0){
186
-
187
- loop++;
332
+
188
-
189
- if(your_stop == 1 && pc_stop == 1){
333
+ if(count >= 1 && sum <= 11){
190
-
334
+
191
- break;
335
+ sum += 10;
192
-
336
+
193
- }
337
+ }
194
-
338
+
195
- }
339
+ }
196
-
197
-
198
-
199
- int []judge = {0,0,0};
340
+
200
-
201
- String []result = {"勝ちました!!","引き分けです。","負けました..."};
202
-
203
- System.out.println("結果");
204
-
205
- System.out.print("あなた:");
206
-
207
- card_list(your_card);
208
-
209
- System.out.println("点数:" + your_sum);
210
-
211
- System.out.print("pc:");
212
-
213
- card_list(pc_card);
214
-
215
- System.out.println("点数:" + pc_sum);
216
-
217
- if(your_sum <= 21 && pc_sum <= 21){
218
-
219
- if(your_sum > pc_sum){
220
-
221
- judge[0]++;
341
+ return sum;
222
-
223
- }
224
-
225
- else if(your_sum == pc_sum){
226
-
227
- judge[1]++;
228
-
229
- }
230
-
231
- else{
232
-
233
- judge[2]++;
234
-
235
- }
236
-
237
- }
238
-
239
- else{
240
-
241
- if(your_sum > 21 && pc_sum > 21){
242
-
243
- judge[1]++;
244
-
245
- }
246
-
247
- else if(your_sum > 21){
248
-
249
- judge[2]++;
250
-
251
- }
252
-
253
- else if(pc_sum > 21){
254
-
255
- judge[0]++;
256
-
257
- }
258
-
259
- }
260
-
261
- for(int i = 0; i < 3; i++){
262
-
263
- if(judge[i] > 0){
264
-
265
- System.out.println(result[i]);
266
-
267
- }
268
-
269
- }
270
-
271
-
272
342
 
273
343
  }
274
344
 
275
- public static void card_list(ArrayList<Integer> array){ //カードのリストを表示
345
+
276
-
277
- for(int i = 0; i < array.size(); i++){
278
-
279
- System.out.print(array.get(i));
280
-
281
- if(i < array.size() - 1){
282
-
283
- System.out.print(" ");
284
-
285
- }
286
-
287
- }
288
-
289
- System.out.println();
290
-
291
- }
292
-
293
-
294
-
295
- public static int sum(ArrayList<Integer> array){ //和
296
-
297
- int sum = 0;
298
-
299
- int count = 0;
300
-
301
- for(int i = 0; i < array.size(); i++){
302
-
303
- sum += array.get(i);
304
-
305
- if(array.get(i) == 1){
306
-
307
- count++;
308
-
309
- }
310
-
311
- }
312
-
313
- if(count >= 1 && sum <= 11){
314
-
315
- sum += 10;
316
-
317
- }
318
-
319
- return sum;
320
-
321
- }
322
346
 
323
347
  }
324
348
 
@@ -326,32 +350,42 @@
326
350
 
327
351
 
328
352
 
329
- 出力結果
353
+ <出力結果>
330
-
331
-
332
-
333
- あなたが先攻です。
354
+
334
-
335
- あなたが現在持っているカードは10
336
-
337
- ひきますか? yes -> 偶数 no -> 奇数 を入力
338
-
339
- 0
340
-
341
- あなたが現在持っているカードは10 8
355
+ あなたが持っているカード:6 6
356
+
342
-
357
+ 合計値1:12
358
+
359
+ 合計値2:12
360
+
343
- きますか? yes -> 偶数 no -> 奇数 を入力
361
+ カードを引きますか? yes -> 0 no - > 10
362
+
344
-
363
+ CPUはカードを引きました。
364
+
365
+ あなたが持っているカード:6 6 4
366
+
345
- 1
367
+ 合計値1:16
368
+
346
-
369
+ 合計値2:16
370
+
371
+ カードを引きますか? yes -> 0 no - > 10
372
+
373
+ CPUはもうカードを引きません
374
+
375
+ あなたが持っているカード:6 6 4 11
376
+
377
+ 合計値1:26
378
+
379
+ 合計値2:26
380
+
381
+ カードを引きますか? yes -> 0 no - > 11
382
+
383
+ 6 6 4 11
384
+
347
- 結果
385
+ 5 7 5
348
-
386
+
349
- あなた:10 8
387
+ あなたの点数26
350
-
388
+
351
- 点数:18
389
+ cpuの点数17
352
-
353
- pc:10 9
390
+
354
-
355
- 点数:19
356
-
357
- 負けました...
391
+ 負けました....