Как уменьшить каждый столбец в ArrayList и создать новый столбец с суммой уменьшенных столбцов в Java - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь придумать новый алгоритм для Болгарского Солитара.В интернете есть только одно решение для этой игры, и все просто копируют его.Здесь я пытаюсь сделать немного по-другому.Это описание

В этом задании вы будете моделировать игру «Болгарский пасьянс».Игра начинается с 45 карт.Случайно разделите их на несколько стопок.Например, вы можете начать со стопок размером 20, 5, 1, 9 и 10. В каждом раунде вы берете одну карту из каждой колоды, образуя новую колоду из этих карт.Например, исходная конфигурация образца будет преобразована в сваи размером 19, 4, 8, 10 и 5. Пасьянс заканчивается, когда сваи имеют размеры 1, 2, 3, 4, 5, 6, 7, 8,и 9, в каком-то порядке.(Можно показать, что вы всегда получаете такую ​​конфигурацию.) В вашей программе создайте случайную начальную конфигурацию и распечатайте ее.Затем продолжайте применять шаг пасьянса и распечатайте результат.Остановитесь, когда будет достигнута окончательная конфигурация пасьянса.

Итак, что я сделал, я создал 2 Dimensional ArrayList и наполнил его случайным количеством стопок.У каждой колоды есть несколько карт.Сумма ровно 45.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class BulgarianSolitare {


    public static void main(String[] args) {


        int numberOfCards = 45;
        Random random = new Random();
        int numberOfPiles = random.nextInt(numberOfCards) + 1;
        System.out.println("Number of piles - " + numberOfPiles);

        ArrayList<ArrayList<Integer>> piles = new ArrayList();
        ArrayList<Integer> eachPile = new ArrayList();
        ArrayList<Integer> lastPile = new ArrayList();


        if (numberOfCards % numberOfPiles != 0) {
            for (int i = 0; i < numberOfPiles; i++) {
                for (int j = 1; j <= numberOfCards / numberOfPiles; j++) {
                eachPile.add(j);
                }
                piles.add(eachPile);
                eachPile = new ArrayList();
            }

            for (int i = 0; i < numberOfCards % numberOfPiles; i++) {
                lastPile.add(i + 1);
            }
            piles.add(lastPile);
            eachPile = new ArrayList();


        } else {

            for (int i = 0; i < numberOfPiles; i++) {
                for (int j = 1; j <= numberOfCards / numberOfPiles; j++) {
                    eachPile.add(j);

                }
                piles.add(eachPile);
                eachPile = new ArrayList();
            }
        }

        System.out.println("This is your beginning set up:");
        for (int i = 0; i < piles.size(); i++) {
            System.out.print("[" + piles.get(i).size() + "]");

        }   
    }
}

Выход для этой программы.

Количество свай - 17

Это ваша начальная установка:

[2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [2] [11]

Теперь мне нужнонаписать основную логику программы, но все, что я пишу, я получаю ошибку out obounds.Может кто-нибудь помочь мне с алгоритмом этой игры.

...