Прохождение по ссылке разрушает все :(
-
29-10-2019 - |
Вопрос
Привет, у меня есть такая структура дерева поиска
родовое словоэто определение корневого узла
родовое словопосле окончания рекурсии в функции максимального значения массив в rootNode не должен редактироваться, так как это первое состояние, но когда я отображаю его, я получаю массив, заполненный материалом, что означает, что rootNode.state передан по ссылке вфункция максимального значения :(
// я пытаюсь реализовать алгоритм MiniMax.
Решение
Если вы не хотите, чтобы объекты, передаваемые в качестве параметров, изменялись, передайте копию (или сделайте копию параметра внутри метода).
Обратите внимание, что char[][]
означает, что у вас есть массив массивов символов, т. е. вы работаете с объектами, и если вы скопируете первый уровень, у вас все еще может быть ссылка на второй.
Таким образом, вам, возможно, придется пройти через первый уровень / измерение и скопировать туда все массивы, например:
родовое словоДругие советы
Если вам нужно, вы можете легко создать копию массива через Arrays.copyOf
Вы также можете создать глубокую копию.Как это сделать, ответили здесь: Как глубоко копировать нерегулярный 2DМассив
Да, Java передает ссылки на массивы, а не на массив в качестве значения.Таким образом, если вы дадите ссылку на свое внутреннее состояние, получатель может его изменить, и изменение будет «видимым» в источнике (фактически: это только один массив, который был изменен, и все держатели ссылокувидит изменение).
Быстрое исправление / решение: клонируйте массив состояний и передайте ссылку на этот клон вместо оригинала.Это сохранит ваше внутреннее корневое состояние неизменным.