回答編集履歴
1
説明の訂正
    
        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  | 
| 29 | 
            +
            public class Sum {
         | 
| 29 30 |  | 
| 30 | 
            -
                public static void main(String[] args) | 
| 31 | 
            +
                public static void main(String[] args){
         | 
| 31 | 
            -
                    
         | 
| 32 | 
            -
             | 
| 32 | 
            +
             | 
| 33 33 | 
             
                    Random rand = new Random();
         | 
| 34 | 
            +
             | 
| 34 | 
            -
                     | 
| 35 | 
            +
                    int loop = 0;
         | 
| 35 | 
            -
             | 
| 36 | 
            +
             | 
| 36 37 | 
             
                    int []card = new int[13];
         | 
| 37 38 |  | 
| 38 | 
            -
                    for(int i = 0; i <  | 
| 39 | 
            +
                    for(int i = 0; i < card.length; i++){
         | 
| 39 | 
            -
                        card[i] = 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 | 
            -
             | 
| 55 | 
            +
                           card_number = rand.nextInt(13);
         | 
| 42 | 
            -
             | 
| 56 | 
            +
                        }while(card[card_number] == 0);
         | 
| 43 | 
            -
                    int loop;
         | 
| 44 | 
            -
             | 
| 57 | 
            +
                        if(i % 2 == 0){
         | 
| 45 | 
            -
             | 
| 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 | 
| 65 | 
            +
                        loop++;
         | 
| 47 66 | 
             
                    }
         | 
| 48 | 
            -
             | 
| 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( | 
| 70 | 
            +
                    while(true){ 
         | 
| 59 71 | 
             
                        do{
         | 
| 60 | 
            -
             | 
| 72 | 
            +
                           card_number = rand.nextInt(13);
         | 
| 61 | 
            -
                            if(tmp >= 10){
         | 
| 62 | 
            -
                                tmp = 10;
         | 
| 63 | 
            -
                            }
         | 
| 64 | 
            -
                        }while(card[ | 
| 73 | 
            +
                        }while(card[card_number] == 0);
         | 
| 65 | 
            -
             | 
| 66 | 
            -
                        
         | 
| 74 | 
            +
             | 
| 67 75 | 
             
                        if(loop % 2 == 0){
         | 
| 68 | 
            -
                            if(your_card.size() > 0){
         | 
| 69 | 
            -
             | 
| 76 | 
            +
                            System.out.print("あなたが持っているカード:");
         | 
| 70 | 
            -
             | 
| 77 | 
            +
                            for(int i = 0; i < your_list.size(); i++){
         | 
| 71 | 
            -
                                System.out. | 
| 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 | 
            -
                                 | 
| 93 | 
            +
                                card[card_number]--;
         | 
| 76 94 | 
             
                            }
         | 
| 77 95 |  | 
| 96 | 
            +
                        }
         | 
| 78 | 
            -
             | 
| 97 | 
            +
                        else{
         | 
| 79 | 
            -
                                your_card.add(tmp);
         | 
| 80 | 
            -
             | 
| 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 | 
            -
                                 | 
| 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 | 
            -
                     | 
| 115 | 
            +
                    for(int i = 0; i < your_list.size(); i++){
         | 
| 102 | 
            -
             | 
| 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 | 
            -
                     | 
| 118 | 
            +
                    System.out.println();
         | 
| 121 | 
            -
             | 
| 119 | 
            +
                    for(int i = 0; i < cpu_list.size(); i++){
         | 
| 122 | 
            -
                            judge[1]++;
         | 
| 123 | 
            -
                        }
         | 
| 124 | 
            -
                         | 
| 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 | 
            -
             | 
| 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 | 
            -
             | 
| 128 | 
            +
                    if(cpu_sum2 > 21){
         | 
| 142 | 
            -
             | 
| 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 | 
            -
             | 
| 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 | 
            -
             | 
| 167 | 
            +
                        if(count >= 1 && sum <= 11){
         | 
| 158 | 
            -
             | 
| 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 | 
            -
            あなたが | 
| 178 | 
            +
            あなたが持っているカード:6 6 
         | 
| 179 | 
            +
            合計値1:12
         | 
| 180 | 
            +
            合計値2:12
         | 
| 172 | 
            -
             | 
| 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 | 
            -
            あなた | 
| 194 | 
            +
            あなたの点数26
         | 
| 176 | 
            -
            点数 | 
| 195 | 
            +
            cpuの点数17
         | 
| 177 | 
            -
            pc:10 9
         | 
| 178 | 
            -
            点数:19
         | 
| 179 | 
            -
            負けました...
         | 
| 196 | 
            +
            負けました....
         | 
