Вопрос

Привет, у меня есть такая структура дерева поиска

родовое слово

это определение корневого узла

родовое слово

после окончания рекурсии в функции максимального значения массив в rootNode не должен редактироваться, так как это первое состояние, но когда я отображаю его, я получаю массив, заполненный материалом, что означает, что rootNode.state передан по ссылке вфункция максимального значения :(

// я пытаюсь реализовать алгоритм MiniMax.

Это было полезно?

Решение

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

Обратите внимание, что char[][] означает, что у вас есть массив массивов символов, т. е. вы работаете с объектами, и если вы скопируете первый уровень, у вас все еще может быть ссылка на второй.

Таким образом, вам, возможно, придется пройти через первый уровень / измерение и скопировать туда все массивы, например:

родовое слово

Другие советы

Если вам нужно, вы можете легко создать копию массива через Arrays.copyOf

Вы также можете создать глубокую копию.Как это сделать, ответили здесь: Как глубоко копировать нерегулярный 2DМассив

Да, Java передает ссылки на массивы, а не на массив в качестве значения.Таким образом, если вы дадите ссылку на свое внутреннее состояние, получатель может его изменить, и изменение будет «видимым» в источнике (фактически: это только один массив, который был изменен, и все держатели ссылокувидит изменение).

Быстрое исправление / решение: клонируйте массив состояний и передайте ссылку на этот клон вместо оригинала.Это сохранит ваше внутреннее корневое состояние неизменным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top