Удаление значений из List1 также удаляет значения из List2? - PullRequest
0 голосов
/ 08 июня 2011

Я хочу удалить значения из копии ArrayList, не затрагивая оригинальную копию. Код в настоящее время: Сначала запускается statsOf2Pairs, затем statsOfFullHouse, но исходный список удаляет свои значения, когда я удаляю их из копии в statsOf2Pairs.

public void statsOf2Pairs(List<List<Integer>> allRolls) {
        long count = 0;
        long debug = 0;
        List<List<Integer>> rolls = new ArrayList<List<Integer>>();
        rolls = allRolls;
        for (List<Integer> roll : rolls) {
            if(roll.size() < 5) {
                debug++;
            }
            if (hasMultiplesOf(roll, 2)) {
                roll.removeAll(Arrays.asList(mRepeatedDice));
                if (hasMultiplesOf(roll, 2)) {
                    count++;
                }
            }
        }
        System.out.println("The amount of 2 pairs in all the rolls possible: "
                + count);
        System.out.println("So the chance of rolling 2 pairs is: "
                + ((double) count / (double) mTotalPossibleRolls) * 100d + " %");
    }

    public void statsOfFullHouse(List<List<Integer>> allRolls) {
        long count = 0;
        long debug = 0;
        for (List<Integer> roll : allRolls) {
            if(roll.size() < 3) {
                debug++;
            }
            if (hasMultiplesOf(roll, 3)) {
                roll.removeAll(Arrays.asList(mRepeatedDice));
                if (hasMultiplesOf(roll, 2)) {
                    count++;
                }
            }
        }
        System.out.println("The amount of Full Houses in all the rolls possible: "
                + count);
        System.out.println("So the chance of rolling a Full House is: "
                + ((double) count / (double) mTotalPossibleRolls) * 100d + " %");
    }

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Я предполагаю, что вы хотите скопировать массив allRolls вместо того, чтобы назначать его рулонам. Вместо

rolls = allRolls;

Попробуйте

List<List<Integer>> rolls = new ArrayList<List<Integer>>(allRolls);

Это создаст новый список (мелкую копию) списка allRolls. Исходным примером было назначение allRolls для рулонов, а не их копирование.

0 голосов
/ 08 июня 2011

Выполняя rolls = allRolls, вы передаете ссылку на массив-список allRolls для rolls. Поэтому и rolls, и allRolls указывают на один и тот же массив, и когда вы пытаетесь удалить одно значение из списков, вы фактически удаляете из оригинального массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...