teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

説明の訂正

2018/04/21 08:16

投稿

退会済みユーザー
answer CHANGED
@@ -18,162 +18,179 @@
18
18
  初めにも申し上げた通り、クラスの知識がほとんどなくて、ソースコードが長くなってしまいました。
19
19
  クラスを使うともっと短くできるかもしれません。
20
20
 
21
+ ### 説明の訂正
21
- いか、私が書いたソスコードを載せおき
22
+ ブラックジャックで「最初にplayerはカードを2枚ずつ引く」ところを忘れてましたすみません
22
-
23
+ その部分を追加しました。
23
24
  ```Java
24
25
  import java.util.Scanner;
26
+ import java.util.Random;
25
27
  import java.util.ArrayList;
26
- import java.util.Random;
27
28
 
28
- public class Main{
29
+ public class Sum {
29
30
 
30
- public static void main(String[] args) {
31
+ public static void main(String[] args){
31
-
32
- Scanner sc = new Scanner(System.in);
32
+
33
33
  Random rand = new Random();
34
+
34
- ArrayList<Integer> your_card = new ArrayList<>();
35
+ int loop = 0;
35
- ArrayList<Integer> pc_card = new ArrayList<>();
36
+
36
37
  int []card = new int[13];
37
38
 
38
- for(int i = 0; i < 13; i++){
39
+ for(int i = 0; i < card.length; i++){
39
- card[i] = 4; //カードはエースからKまで4枚ずつ
40
+ card[i] = 4;
40
41
  }
42
+
43
+ Scanner sc = new Scanner(System.in);
44
+ ArrayList<Integer> your_list = new ArrayList<>();
45
+ ArrayList<Integer> cpu_list = new ArrayList<>();
46
+
47
+ int your_sum1= 0;
48
+ int your_sum2 = 0;
49
+ int cpu_sum1 = 0;
50
+ int cpu_sum2 = 0;
51
+
52
+ int card_number;
53
+ for(int i = 0; i < 4; i++){
54
+ do{
41
- int you = rand.nextInt(1000);
55
+ card_number = rand.nextInt(13);
42
- int pc = rand.nextInt(1000);
56
+ }while(card[card_number] == 0);
43
- int loop;
44
- if(you >= pc){
57
+ if(i % 2 == 0){
45
- System.out.println("あなたが先攻です。");
58
+ your_list.add(card_number + 1);
59
+ card[card_number]--;
60
+ }
61
+ else{
62
+ cpu_list.add(card_number + 1);
63
+ card[card_number]--;
64
+ }
46
- loop = 0;
65
+ loop++;
47
66
  }
48
- else{
67
+
49
- System.out.println("pcが先攻です。");
50
- loop = 1;
51
- }
52
- int tmp;
53
- int your_sum = 0;
54
- int pc_sum = 0;
55
- int input = 0;
56
- int your_stop = 0;
68
+ int your_stop = 0; //引くのをやめるとき1になる
57
69
  int pc_stop = 0;
58
- while(your_sum <= 21 && pc_sum <= 21){
70
+ while(true){
59
71
  do{
60
- tmp = rand.nextInt(13) + 1;
72
+ card_number = rand.nextInt(13);
61
- if(tmp >= 10){
62
- tmp = 10;
63
- }
64
- }while(card[tmp - 1] == 0);
73
+ }while(card[card_number] == 0);
65
-
66
-
74
+
67
75
  if(loop % 2 == 0){
68
- if(your_card.size() > 0){
69
- System.out.print("あなたが現在持っているカード");
76
+ System.out.print("あなたが持っているカード:");
70
- card_list(your_card);
77
+ for(int i = 0; i < your_list.size(); i++){
71
- System.out.println("ひきますか? yes -> 偶数 no -> 奇数 を入力");
78
+ System.out.print(your_list.get(i) + " ");
72
- input = Integer.parseInt(sc.nextLine());
73
79
  }
80
+ System.out.println();
81
+ your_sum1 = sum(1,your_list);
82
+ your_sum2 = sum(2,your_list);
83
+ System.out.println("合計値1:" + your_sum1);
84
+ System.out.println("合計値2:" + your_sum2);
85
+
86
+ System.out.print("カードを引きますか? yes -> 0 no - > 1");
87
+ int your_choice = Integer.parseInt(sc.nextLine());
88
+ if(your_choice % 2 == 1){
89
+ your_stop = 1;
90
+ }
74
91
  else{
92
+ your_list.add(card_number + 1);
75
- input = 0;
93
+ card[card_number]--;
76
94
  }
77
95
 
96
+ }
78
- if(input % 2 == 0){
97
+ else{
79
- your_card.add(tmp);
80
- your_sum = sum(your_card);
98
+ cpu_sum2 = sum(2,cpu_list);
99
+ if(cpu_sum2 >= 16){
100
+ System.out.println("CPUはもうカードを引きません");
101
+ pc_stop = 1;
81
102
  }
82
103
  else{
104
+ System.out.println("CPUはカードを引きました。");
105
+ cpu_list.add(card_number + 1);
83
- your_stop = 1;
106
+ card[card_number]--;
84
107
  }
85
- }
108
+ }
86
- else{
87
- pc_card.add(tmp);
88
- pc_sum = sum(pc_card);
89
- if(pc_sum > 16){
90
- pc_stop = 1;
91
- }
92
- }
93
- card[tmp - 1]--;
94
- loop++;
95
109
  if(your_stop == 1 && pc_stop == 1){
96
110
  break;
97
111
  }
112
+ loop++;
98
113
  }
99
114
 
100
- int []judge = {0,0,0};
101
- String []result = {"勝ちました!!","引き分けです。","負けました..."};
115
+ for(int i = 0; i < your_list.size(); i++){
102
- System.out.println("結果");
116
+ System.out.print(your_list.get(i) + " ");
103
- System.out.print("あなた:");
104
- card_list(your_card);
105
- System.out.println("点数:" + your_sum);
106
- System.out.print("pc:");
107
- card_list(pc_card);
108
- System.out.println("点数:" + pc_sum);
109
- if(your_sum <= 21 && pc_sum <= 21){
110
- if(your_sum > pc_sum){
111
- judge[0]++;
112
- }
113
- else if(your_sum == pc_sum){
114
- judge[1]++;
115
- }
116
- else{
117
- judge[2]++;
118
- }
119
117
  }
120
- else{
118
+ System.out.println();
121
- if(your_sum > 21 && pc_sum > 21){
119
+ for(int i = 0; i < cpu_list.size(); i++){
122
- judge[1]++;
123
- }
124
- else if(your_sum > 21){
120
+ System.out.print(cpu_list.get(i) + " ");
125
- judge[2]++;
126
- }
127
- else if(pc_sum > 21){
128
- judge[0]++;
129
- }
130
121
  }
131
- for(int i = 0; i < 3; i++){
132
- if(judge[i] > 0){
133
- System.out.println(result[i]);
122
+ System.out.println();
123
+ int your_final_sum = your_sum2;
124
+ int cpu_final_sum = cpu_sum2;
134
- }
125
+ if(your_sum2 > 21){
126
+ your_final_sum = your_sum1;
135
127
  }
136
-
137
- }
138
- public static void card_list(ArrayList<Integer> array){ //カードのリストを表示
139
- for(int i = 0; i < array.size(); i++){
140
- System.out.print(array.get(i));
141
- if(i < array.size() - 1){
128
+ if(cpu_sum2 > 21){
142
- System.out.print(" ");
129
+ cpu_final_sum = cpu_sum1;
143
- }
144
130
  }
131
+ System.out.println("あなたの点数" + your_final_sum);
132
+ System.out.println("cpuの点数" + cpu_final_sum);
133
+ String []result = {"勝ちました!!","引き分けです。","負けました...."};
134
+ if(your_final_sum > 21 && cpu_final_sum > 21 || your_final_sum == cpu_final_sum){
145
- System.out.println();
135
+ System.out.println(result[1]);
136
+ }
137
+ else if(your_final_sum > 21){
138
+ System.out.println(result[2]);
139
+ }
140
+ else if(cpu_final_sum > 21){
141
+ System.out.println(result[0]);
142
+ }
143
+ else if(your_final_sum > cpu_final_sum){
144
+ System.out.println(result[0]);
145
+ }
146
+ else{
147
+ System.out.println(result[2]);
148
+ }
146
149
  }
147
-
148
- public static int sum(ArrayList<Integer> array){ //和
150
+ public static int sum(int n,ArrayList<Integer> array){ //和
151
+ //(i)エースを全て1とする
152
+ //(ii)エースの一つを11とする
149
153
  int sum = 0;
150
154
  int count = 0;
151
155
  for(int i = 0; i < array.size(); i++){
152
- sum += array.get(i);
153
156
  if(array.get(i) == 1){
154
157
  count++;
155
158
  }
159
+ if(array.get(i) < 10){
160
+ sum += array.get(i);
161
+ }
162
+ else{
163
+ sum += 10;
164
+ }
156
165
  }
166
+ if(n % 2 == 0){
157
- if(count >= 1 && sum <= 11){
167
+ if(count >= 1 && sum <= 11){
158
- sum += 10;
168
+ sum += 10;
169
+ }
159
170
  }
160
171
  return sum;
161
172
  }
173
+
162
174
  }
163
175
  ```
164
176
 
165
- 出力結果
177
+ <出力結果>
166
-
167
- あなたが先攻です。
168
- あなたが現在持っているカードは10
169
- ひきますか? yes -> 偶数 no -> 奇数 を入力
170
- 0
171
- あなたが現在持っているカードは10 8
178
+ あなたが持っているカード:6 6
179
+ 合計値1:12
180
+ 合計値2:12
172
- きますか? yes -> 偶数 no -> 奇数 を入力
181
+ カードを引きますか? yes -> 0 no - > 10
182
+ CPUはカードを引きました。
183
+ あなたが持っているカード:6 6 4
173
- 1
184
+ 合計値1:16
185
+ 合計値2:16
186
+ カードを引きますか? yes -> 0 no - > 10
187
+ CPUはもうカードを引きません
188
+ あなたが持っているカード:6 6 4 11
189
+ 合計値1:26
190
+ 合計値2:26
191
+ カードを引きますか? yes -> 0 no - > 11
192
+ 6 6 4 11
174
- 結果
193
+ 5 7 5
175
- あなた:10 8
194
+ あなたの点数26
176
- 点数:18
195
+ cpuの点数17
177
- pc:10 9
178
- 点数:19
179
- 負けました...
196
+ 負けました....