Добавление list1 в list2 и обновление list1 без влияния на list2 - PullRequest
0 голосов
/ 05 апреля 2019

Я работаю над настольной игрой и в настоящее время пытаюсь сохранить всех окружающих соседей в двумерном массиве в виде списков в списке. Проблема, с которой я столкнулся, заключается в том, что когда я сохранил list1 в list2, а затем перешел в итерации и изменил list1 на что-то другое, это также влияет на list2, поэтому я теряю значения другого соседа.

Вот что я пробовал:

     private ArrayList<ArrayList> forcedPlays = new ArrayList<ArrayList>();
     private ArrayList<Integer> forcedPlay = new ArrayList<Integer>();   

    private void findNeighbors(){
     for (int y = -1; y <=1 ; y+=2) {
           for (int x = -1; x <= 1; x+=2) {
               if (board[myY+y][myX+x]!=null){
                   enemyY = myY+y;
                   enemyX = myX+x;
                    forcedPlay.addAll(Arrays.asList(
                                     Integer.valueOf(enemyY),
                                     Integer.valueOf(enemyX)));

     forcedPlays.add(forcedPlay);
     forcedPlay.clear()}}}}

Если мой игрок окружен двумя соседями, я ожидаю, что выходные данные принудительного воспроизведения будут выглядеть, например: [[2,1], [4,3]], но вместо этого они выглядят как [[], [] ]. Итак, что я не понимаю, так это как добавить list1 в list2, а затем разорвать связь между ними, чтобы при очистке list1 не удалялся list2?

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Вы можете создать копию forcedPlay перед ее добавлением.

forcedPlays.add(new ArrayList<Integer>(forcedPlay));

Таким образом, изменения, внесенные в forcedPlay, не затронут список, добавленный во внешний список.

0 голосов
/ 05 апреля 2019

Вы делаете эталонную копию.В основном list1 указывает на некоторые элементы list2.Вам необходимо добавить в список 2 копии элементов в списке 1, клоны.

...